我需要通过字符串匹配来查找进程,并且杀死它,需要在另一个脚本文件的一行中执行它:这是我尝试过的:
'kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )'
“杀死 $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )”
由于嵌套的单引号,第一个不起作用,第二个不起作用,因为父脚本将 $2 用作父脚本的参数 2。我该怎么做呢?
完成该任务的最简单方法是:
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。
您只能在双引号字符串中使用反斜杠转义几个字符:$
, "
, \
, 换行符和反引号;并且在单引号字符串内反斜杠只是反斜杠。但是,这足以让您键入任何内容。