0

我需要通过字符串匹配来查找进程,并且杀死它,需要在另一个脚本文件的一行中执行它:这是我尝试过的:

'kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )'
“杀死 $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )”

由于嵌套的单引号,第一个不起作用,第二个不起作用,因为父脚本将 $2 用作父脚本的参数 2。我该怎么做呢?

4

1 回答 1

3

完成该任务的最简单方法是:

pkill xxx

procps(如果您没有安装它,您可以在 debian/ubuntu 世界中的 package 中找到它。)您可能需要使用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。

您只能在双引号字符串中使用反斜杠转义几个字符:$, ", \, 换行符和反引号;并且在单引号字符串内反斜杠只是反斜杠。但是,这足以让您键入任何内容。

于 2013-10-06T23:39:54.140 回答