我如何在远程ssh bash命令中遍历本地数组
||
我需要在远程位置上执行几个复制命令(使用ssh \“ cp blah blah2 \”)。我不想为每个命令使用单独的ssh连接,而是要执行以下操作:
dirs=(dir1 dir2 dir3)
for dir in ${dirs[*]} ; do echo $dir; done
ssh user@server \"for dir in ${dirs[*]}; do echo $dir; cp some/file.txt /home/user/$dir/; done\"
但是,即使第一个回显打印了所有三个目录,但在远程服务器上执行的回显都等于最后一个目录值(\“ dir3 \”)。我不明白自己在做错什么,或者为什么当它仅使用相同的值时却打印三个回显(并执行三个副本)。我想这与变量扩展(本地或远程)有关。
我已经尝试使用dirs = \“ dir1 dir2 dir3 \”,@而不是*,但是我无法找到有效的组合。
任何人有这个问题的经验吗? :)
干杯,
斯文德
没有找到相关结果
已邀请:
1 个回复
糖固傻染
循环会创建$ dir变量,并且您的shell会对其进行扩展,因此您实际上是在执行:
您应该转义$以避免shell扩展。尝试:
在此示例中,
是局部变量,
是远程变量。您的shell将在执行ssh之前替换命令中的$ dirs,因此您将真正执行: