我需要通过字符串匹配找到进程,并且杀死它,需要在另一个脚本文件中的一行中执行: 这是我试过的:
'kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )'
"kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )"
第一个因为嵌套的单引号而无效,第二个不起作用,因为父脚本将$ 2作为父脚本的参数2。 我该怎么做?
答案 0 :(得分:3)
完成该任务的最简单方法是:
pkill xxx
(你可以在包procps
的debian / ubuntu世界中找到它,如果你没有安装它。)你可能需要使用pkill -f xxx
,这取决于xxx是否是部分进程名称或参数,通常是脚本执行的情况。
但是,要回答关于shell引用的更一般的问题,如果需要传递字符串
kill $(ps aux | grep xxx | grep -v grep | awk '{print $2}')
作为参数,您需要使用反斜杠转义:
bash -c "kill \$(ps aux | grep xxx | grep -v grep | awk '{print \$2}')"
或者,您可以将几个带引号的字符串粘贴在一起:
bash -c 'kill $(ps aux | grep xxx | grep -v grep | awk '"'"'{print $2}'"'"')'
就我个人而言,我发现第一个更具可读性但是YMMV。
你只能反斜杠转义双引号字符串中的几个字符:$
,"
,\
,换行符和反引号;在单引号字符串内反斜杠只是反斜杠。但是,这足以让你输入任何东西。