SSH远程执行循环序列失效:仅迭代i=12,是否需转义字符?
问题与解决方案
问题现象
通过SSH远程执行循环命令时,原本预期遍历{01..12}序列,对每个host-prv$i执行modpkg和runpkg命令,但实际仅以i=12进行迭代,循环序列失效。
原执行命令:
ssh 10.10.10.10 "for i in {01..12}; do modpkg -e -n host-prv$i; runpkg -n host-prv$i; done"
问题原因
使用双引号包裹远程命令时,本地Shell会优先解析命令中的变量$i。如果本地环境中$i的最终值为12(或之前的会话残留了该值),发送到远程服务器的命令里$i已经被替换成12,导致远程执行的循环逻辑失效,仅处理host-prv12。
解决方法
改用单引号包裹远程命令,单引号会阻止本地Shell解析内部变量,变量替换操作将交给远程服务器的Shell完成,从而保证循环逻辑正常执行。
修正后的命令:
ssh 10.10.10.10 'for i in {01..12}; do modpkg -e -n host-prv$i; runpkg -n host-prv$i; done'
感谢@dave_thompson_085提供的解决方案。
内容的提问来源于stack exchange,提问作者Luiz Bom
相关产品推荐
相关产品推荐

