部分命令输出到新命令

时间:2018-01-11 21:17:22

标签: bash terminal

我正在尝试在批处理脚本中自动执行以下命令,
但不确定如何将[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

1 个答案:

答案 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的原因的注释。 )