如何在 Makefile 中通过 SSH 命令转义字符

如何在 Makefile 中通过 SSH 命令转义字符

我正在尝试通过 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”将被替换并连接。

相关内容