如何让SSH远程命令中的子命令在远端执行而非本地?
让SSH命令中的子命令在远程执行的解决方法
你的问题出在本地shell会优先解析双引号内的命令替换语法$(...),导致这部分逻辑在本地执行后才把结果传给远程机器。要让$(ls -la /folder | wc -l)在远程执行,有两种简单可行的方式:
方法一:转义特殊字符
把命令里的$和括号前加上反斜杠\,阻止本地shell解析这部分内容,让它原封不动传到远程:ssh user@host "if [ \$(ls -la /folder | wc -l) -eq 83 ]; then true; else false; fi;"方法二:改用单引号包裹远程命令
单引号在本地shell中会完全保留内部内容的原样,不会解析变量或命令替换,直接将完整命令发送给远程执行,写法更简洁:ssh user@host 'if [ $(ls -la /folder | wc -l) -eq 83 ]; then true; else false; fi;'
如果你的远程命令本身包含单引号,再优先考虑方法一的转义方式即可。
内容的提问来源于stack exchange,提问作者ansanes
相关产品推荐
相关产品推荐

