首页 > shell转义问题

shell转义问题

process="ps -ef|grep /home/abc|awk {print $2}" ---这里将取出进程id的语句定义成变量
下面杀掉这个进程:
kill -9 $process
但是执行的时候报:
kill: /home/abc|grep: arguments must be process or job IDs
kill: /home/abc|grep|awk: arguments must be process or job IDs

应该是转义问题,我用process这样貌似不行

这个process我就想定义成一个公共变量,因为这个脚本很多机器用,而且grep条件可能都不一样,所以我不想直接从这得出进程id,我只想定义成一个语句,下面要用的地方就写成kill -9 $process 这样

那个单引号不能显示,请看截图,谢谢!


直接把双引号里内容直接输出了,并未执行。shell需要表达式执行需用``包围

process=`ps -ef|grep '/home/abc'|grep -v grep|awk '{print $2}'`

另外可以考虑这个

 ps -ef|grep '/home/abc'|grep -v grep|awk '{print $2}'|xargs -n1 kill -9

题主说作为变量哪里需要就哪里调用

process="ps -ef|grep /home/abc|grep -v grep|awk '{print \$2}'"
--需要执行可以用$($process),不过试了下不行,ERROR: Unsupported SysV option.
考虑是否可以用eval(方法来自google,测试可行)
kill -9 `eval $process`
【热门文章】
【热门文章】