如何通过ssh在远程服务器执行含反引号、awk的变量赋值命令
执行远程命令的正确写法
你可以直接使用下方经过转义处理的命令,避免特殊字符被本地shell提前解析:
ssh MyServer 'export EXTERNAL_IP=`hostname -I | awk '\''{print $1}'\''` && echo $EXTERNAL_IP'
原理解释
- 外层单引号用来包裹整个远程命令段,避免本地shell提前解析反引号、
$等特殊字符,确保命令内容原样传递到远程服务器执行 - awk参数中的单引号无法直接出现在单引号包裹的内容中,因此使用
'\''格式转义:第一个'结束当前单引号段,\'输出一个转义后的单引号,最后一个'重新开启单引号段继续包裹后续内容
如果你觉得单引号转义比较麻烦,也可以使用双引号包裹的版本,只要给所有远程侧的特殊字符加转义符即可:
ssh MyServer "export EXTERNAL_IP=\`hostname -I | awk '{print \$1}'\` && echo \$EXTERNAL_IP"
两种写法执行后都会在远程服务器的当前命令执行上下文中设置EXTERNAL_IP变量,同时输出获取到的第一个IP地址。如果需要变量长期生效,可将赋值命令写入远程服务器的~/.bashrc或~/.profile等shell配置文件中。
内容的提问来源于stack exchange,提问作者Morteza Malekabadi
相关产品推荐
相关产品推荐

