在shell脚本中循环不在远程服务器上工作

时间:2015-08-21 15:08:37

标签: linux shell ssh

代码尝试从本地服务器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文件中附加任何内容。

1 个答案:

答案 0 :(得分:1)

尝试&lt;&lt;&lt;&#39; END3&#39;

注意END3周围的引号,它们会阻止here-document中的shell替换。您希望将$ -signs传输到ssh连接的另一端,而不是在本地解释。反叛也一样。

从评论中提取为已接受的答案。发布为社区维基