![如何在 Makefile 中通过 SSH 命令转义字符](https://linux22.com/image/1575569/%E5%A6%82%E4%BD%95%E5%9C%A8%20Makefile%20%E4%B8%AD%E9%80%9A%E8%BF%87%20SSH%20%E5%91%BD%E4%BB%A4%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6.png)
我正在尝试通过 SSH 命令在 Docker 容器中重新加载 nginx...这是我的 Makefile 中的内容:
reload:
ssh [email protected] "docker kill -s HUP `$$(docker ps | grep nginx | awk '{print $$1}')`"
但是命令不起作用...我收到此错误:
"docker kill" requires at least 1 argument.
See 'docker kill --help'.
Usage: docker kill [OPTIONS] CONTAINER [CONTAINER...]
Kill one or more running containers
make: *** [reload] Error 1
答案1
在 bash 中,“,`、$()、$(()) 是预先解释和替换的。
如果要转义这些字符,可以使用 \ 反斜杠。
尝试使用“set -x”(可以使用“set +x”关闭)调试此命令。它显示了预先解释的内容。
我更喜欢单撇号,因为它不会被处理。不过您也必须转义字符串中的每个单撇号。试试这个:
远程控制[电子邮件保护]'docker kill -s HUP `$$(docker ps | grep nginx | awk \'{print $$1}\')`'
在这种情况下,'...' 之间的命令将在 ssh 的另一端执行。所有参数都将在那里执行。如果您想从当前 shell 发送参数,则必须使用一种解决方法。例如:
'something_here'“$localvar”'continnue_command'这样,“$localvar”将被替换并连接。