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

Linux shell脚本中的循环在远程服务器上不工作,linux,shell,ssh,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 $

代码尝试从本地服务器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
ssh root@$remoteip'bash-s'dirstr.txt
mkdir-p$目录
chown$root:$root$目录
chmod 777$目录
完成
(完)
上面的操作在远程服务器上创建了一个运行良好的目录结构

我想对相同的目录结构加焦油。所以我使用了和上面相同的逻辑

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

ssh root@$remoteip'bash-s'尝试为您试图远程执行的内容制作一个bash脚本,然后通过管道将其传输到ssh
ssh root@$remoteip'bash-s'
。我认为这可能与here文档的处理方式有关。或者试试
,我很惊讶第一个示例能起作用,因为如果不引用here文档的分隔符,所有替换都应该在本地进行。如果OP在本地测试了他的代码,因此仍然设置了环境变量,那么它可能会起作用。您还可以将所有内容放入脚本中,将该脚本复制到远程服务器,然后从远程服务器调用它。@Shashank它们防止在脚本中替换shell。您希望将
$
-符号传输到ssh连接的另一端,而不是本地解释。背勾也一样。