正确使用引号来使用SSH执行命令

时间:2019-07-04 17:38:34

标签: bash

我需要有关bash报价规则的帮助:

我知道我可以运行这样的命令:

namespace ‘rlang’ 0.1.2 is being loaded, but >= 0.2.2 is required
ERROR: lazy loading failed for package ‘tidyselect’

但是当我需要一个更复杂的命令(例如,这样不起作用的命令)时,我迷路了:

/usr/bin/ssh root@my_srv "ls /usr/local/bin"

直接在远程服务器中启动的同一命令运行正常:

/usr/bin/ssh root@my_srv "awk '/dbname/{print $NF}' /var/myfile | sed "s/'//g" | sed 's/,//g'"

2 个答案:

答案 0 :(得分:1)

您需要使用\来转义内部双引号:

"awk '/dbname/{print \$NF}' /var/myfile | sed \"s/'//g\" | sed 's/,//g'"

答案 1 :(得分:0)

在SSH登录命令之后,脚本或命令也可以直接编写而无需双引号。