一个命令的 Shell 输出作为另一命令的输入

一个命令的 Shell 输出作为另一命令的输入

我正在尝试自动化Forever JS 让我的开发服务器保持运行为此,我需要检查并停止永久进程以启动另一个进程。通过跑步

sudo forever list

我得到以下输出:

信息:永远运行的进程
数据:永远的uid命令脚本PID   id 日志文件正常运行时间       
数据:[0] 0NQH /usr/bin/nodejs app.js 17047   17049    /home/ubuntu/.forever/0NQH.log 0:2:4:58.594

从上面的输出我需要PID这是17049当前并将其提供给下一个命令,如下所示:

sudo forever stop {{pidfromabove}}

为了实现这一点,在我的脚本中我尝试了很多东西,主要是试图找到之间的两个字符串应用程序.js/家但由于某种原因它一直打印整行。我尝试过 sed 和 awk 的不同组合。如何从上面获取 pid 以提供给下一个stop命令?

答案1

这看起来像是 的一个用例awk。如果您确定输出格式稳定,以便您感兴趣的 PID 始终是该行的第 7 个元素,则这将打印 PID app.js

sudo forever list | awk '/app\.js/ { print $7 }'

答案2

您遇到的问题可能是因为输出位于 stderr,而不是 stdout。如果是这种情况,您可以尝试:

sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'

它应该只回答第二个 pid。

然后你可以这样做:

sudo forever stop `sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'`

相关内容