2

我有一个字符串:

str='sudo nohup bash -c "kill -9 `ps -ef|grep "udp_receiver"|grep -v "grep"|awk '{print $2}'` > /nohup.out 2>&1 &"'

有很多引号,上面的变量不正确

我试过了

str='sudo nohup bash -c "kill -9 `ps -ef|grep \"tcp\"|grep -v \"grep\"|awk \'{print $2}\'` > /nohup.out 2>&1 &"'

仍然不正确如何修改它以使其正确?谢谢

4

2 回答 2

1
str="sudo nohup bash -c 'kill -9 $(ps -ef|grep udp_receiver|grep -v grep|awk \"{print $2}\") > /nohup.out 2>&1 &'"

我还没有很容易地检查它,但这应该是关于它的。

但是,请查看procps'pkill命令

pkill -f udp_receiver

应该做同样的事情。它会自动避免自我杀伤(参见手册页)。另外,请注意,您可以先查询事物以测试您的模式:

pgrep -fl udp_receiver
于 2013-04-28T21:11:28.280 回答
0

一个有趣的技巧是摆脱传统的转义,使用插值来扩展元字符。我会让你调试它并调整你的环境。

平方=“'”;#单引号
dq='"'; #双引号
xq='`'; #执行报价
dol='$'; #美元符号
str="sudo nohup bash -c ${dq}kill -9 ${xq}ps -ef|grep ${dq}udp_receiver$dq|grep -v ${dq}grep$dq|awk ${sq}{print ${dol}2}$sq$xq > /nohup.out 2>&1 &$dq"
于 2013-04-28T21:19:47.527 回答