我正在尝试在批处理脚本中自动执行以下命令,
但不确定如何将[proc_status]中的[进程ID]带到kill命令?
我尝试了$(!!)和$(1)但没有成功。
user1@dev_server_100:/path> ./proc_status
PROC_NAME up, process id = 16394
user1@dev_server_100:/path> kill -9 16394
答案 0 :(得分:3)
您想要的整体技术称为命令替换。你可以使用var=$(echo "something) ; echo $var
获得cmd-sub,或者你可以在遗留代码中找到$(
和)
在两边都替换为back-tic字符(var = {{1} } echo"某事" '
(这里的格式不正确,但SO会出于自己的目的使用背景。我不记得过去我是如何做到这一点的)
以下是几种解决方案:
'
这允许pidToKill=$( ./proc_status | awk '{print $NF}' )
kill $pidToKill
计算行中的字段数(awk
)。 NF
读取$NF
为" awk
" ($6
)在这种情况下。
如果NF==6
的输出永远不会改变,那么您可以使用较小的实用程序来捕获PID,即
./proc_status
此pidToKill=$( ./proc_status | cut -d " " -f 6 )
kill $pidToKill
是输出数据的第6个字段。
最后,您可以使用shell参数替换功能来完成相同的工作,
cut
pidToKill=$( ./proc_status)
kill ${pidToKill##* }
(需要尾随空格)说,搜索##*
的值,直到值中的最后一个空格,并删除从前面到该点的所有内容。
除非绝对必要,否则你应该研究为什么使用pidToKill
是件坏事。 (这不是一个很好的习惯。如果您确定在这种情况下kill -9
是唯一的解决方案,那么您可能希望在代码中包含有关您使用-9
的原因的注释。 )