您不能在单引号字符串中包含单引号,因为除了关闭字符串的单引号之外没有任何内容被解释。你可以用"'"
置单引号字符串:
ssh host 'for pid in $(ps -ef | grep "some process" | awk '"'"'{print $2}'"'"'); do kill -9 $pid; done'
另外,串联逃脱单引号(\'
):
ssh host 'for pid in $(ps -ef | grep "some process" | awk '\''{print $2}'\''); do kill -9 $pid; done'
见Strong Quoting。
你的命令解释为一对夫妇的$IFS
- 分隔参数的错误的原因:
for pid in $(ps -ef | grep "some process" | awk {print
}); do kill -9 $pid; done
有中没有$2
字符串,因为$2
被解释为一个shell变量,并且这个变量在普通shell上下文中的值是空的。
因此,您发送以下命令到服务器:
for pid in $(ps -ef | grep "some process" | awk {print }); do kill -9 $pid; done
如果在终端运行此命令,你会从AWK得到同样的错误。
在这种情况下,您可以使用'pkill -f“某个进程”'。 – ymonad
这不会杀死所有具有特定名称的进程,是不是? –