代码尝试从我的本地服务器ssh到远程服务器并运行一些命令。
ssh root@$remoteip 'bash -s' <<END3
gcdadirs=`strings binary | egrep '.gcda$'`
for dir in ${gcdadirs[@]}; do
directory=$(dirname ${dir})
echo $dir >> dirstr.txt
mkdir -p $directory
chown $root:$root $directory
chmod 777 $directory
done
END3
以上命令在远程服务器上创建了一个目录结构,目前工作正常。
我想要将相同的目录结构打包成tar文件。所以我正在使用与上述相同的逻辑。
ssh root@$remoteip 'bash -s' <<END3
touch emptyfile
tar -cf gcda.tar emptyfile
gcdadirs=`strings binary | egrep '.gcda$'`
for dir in ${gcdadirs[@]}; do
tar -rf gcda.tar $dir
done
END3
上面的代码应该创建一个tar文件,其中包含由for循环返回的所有目录。我通过将代码复制到远程服务器并在那里运行来尝试代码逻辑,并且它有效。但是,如果我从本地服务器ssh连接到远程服务器并尝试运行它,则不会进入for循环。它不会将任何内容附加到在第二行创建的空文件中的tar文件。
ssh root@$remoteip 'bash -s' < scriptname
。我认为这可能与here文档的处理方式有关。 - jwde<<'END3'
(注意引号周围的END3)。祝好运。 - shellter$
符号被传输到ssh连接的另一侧,而不是在本地解释。反引号也是如此。 - ex-bart