我有一个字符串:
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 &"'
仍然不正确 如何修改它以使其正确? 感谢
答案 0 :(得分:1)
str="sudo nohup bash -c 'kill -9 $(ps -ef|grep udp_receiver|grep -v grep|awk \"{print $2}\") > /nohup.out 2>&1 &'"
我还没有检查过,但这应该是关于它的。
但是,请查看procps
的{{1}}命令
pkill
应该做同样的事情。它会自动避免自我杀死(请参阅manpage)。另请注意,您可以先查询事物以测试您的模式:
pkill -f udp_receiver
答案 1 :(得分:0)
一个有趣的技巧是摆脱传统的转义,使用插值来扩展元字符。我会让你调试它并调整你的环境。
sq="'"; #single quote dq='"'; #double quote xq='`'; #execution quote dol='$'; #dollar sign 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"