簡體   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