如何在Makefile中转义命令以远程查杀进程?

时间:2017-07-26 01:48:22

标签: bash makefile escaping

server_stop:
    ssh $(SERVER_USERNAME)@$(SERVER_HOSTNAME) \
        "kill $$(ps aux | grep '[p]ython abc-server' | awk '{print $$2}')"

这给出了

bash: line 0: kill: (60403) - No such process
bash: line 1: 60364: command not found

我认为p周围的括号没有正确转义。我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果您知道命令行,则不需要使用ps + grep。请改为使用pgrep

server_stop:
    ssh $(SERVER_USERNAME)@$(SERVER_HOSTNAME) \
        'kill $$(pgrep -f "[p]ython abc-server")'

-f允许您传递完整的命令行。

为了避免对命令$$(pgrep -f" [p] ython abc-server")进行shell评估,用单引号括起来,所以评估将在目标服务器中进行

注意:如果可能,请在服务器中保留一个启动/停止脚本,这样ssh命令只会调用脚本,避免出现当前问题。