代码尝试从本地服务器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文件中附加任何内容。
答案 0 :(得分:1)
尝试&lt;&lt;&lt;&#39; END3&#39;
注意END3周围的引号,它们会阻止here-document中的shell替换。您希望将$ -signs传输到ssh连接的另一端,而不是在本地解释。反叛也一样。
从评论中提取为已接受的答案。发布为社区维基