繁体   English   中英

如何在远程ssh bash命令中迭代本地数组

[英]How do I iterate over a local array in a remote ssh bash command

我需要在远程位置执行几个复制命令(使用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"

但即使第一个echo打印所有三个dirs,在远程服务器上执行的回声都等于最后一个dir值(“dir3”)。 我不明白我做错了什么,或者为什么它只使用相同的值打印三个回声(并做三个副本)。 我想这与变量扩展(本地或远程)有关...

我尝试使用dirs =“dir1 dir2 dir3”,@而不是*,引用,但我找不到一个有效的组合。

有没有遇到过这个问题的经验? :)

干杯,斯文德。

在调用ssh之前执行的for循环会创建一个$ dir varible,而你的shell会扩展它,所以你实际上正在执行:

    ssh user@server "for dir in dir1 dir2 dir3; do echo dir3; cp some/file.txt /home/user/dir3/; done"

你应该逃避$以避免shell扩展。 尝试:

dirs="dir1 dir2 dir3"
ssh user@server "for dir in $dirs ; do echo \$dir; cp some/file.txt /home/user/\$dir/; done"

在此示例中, $dirs是局部变量, $dir是远程变量。 在执行ssh之前,你的shell将在你的命令中替换$ dirs,所以你将真正执行:

ssh user@server "for dir in dir1 dir2 dir3; do echo \$dir; cp some/file.txt /home/user/\$dir/; done"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM