错误通过ssh运行bash命令时
问题描述:
当试图通过ssh运行以下命令:错误通过ssh运行bash命令时
ssh hostname 'for pid in $(ps -ef | grep "some process" | awk '{print $2}'); do kill -9 $pid; done'
我得到以下错误:
awk: cmd. line:1: {print
awk: cmd. line:1: ^unexpected newline or end of string
我试着用不同的方式逃脱但还没有找到正确的方法 - 或者也许是别的?
提前致谢!
答
您不能在单引号字符串中包含单引号,因为除了关闭字符串的单引号之外没有任何内容被解释。你可以用"'"
置单引号字符串:
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'
你的命令解释为一对夫妇的$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得到同样的错误。
+0
正如@ymonad在上面的一个注释中指出的那样,** pkill **命令将减少引用问题:'ssh host'pkill -KILL -f“某个进程”“'......只要文本**'当然,某些进程**不包括任何引号。 – Jdamian
在这种情况下,您可以使用'pkill -f“某个进程”'。 – ymonad
这不会杀死所有具有特定名称的进程,是不是? –