是否可以在 bash 中运行一个命令,并根据第一个命令的输出启动另一个命令?

是否可以在 bash 中运行一个命令,并根据第一个命令的输出启动另一个命令?

我创建了一个别名

alias rubyserver='ruby -run -e httpd -- -p 5000 . && open localhost:5000'

从而启动一个Web服务器,然后打开该服务器提供的页面。但在第一个命令完成之前,第二个命令不会运行。

有没有办法运行该命令,然后在第一个命令输出特定字符串时开始运行第二个命令?

第二个命令必须能够看到第一个命令打印出WEBrick::HTTPServer#start,这意味着服务器已经在运行,并且在启动之前。

答案1

这是从 stackoverflow.com 上的这个答案得出的:

本质上,

one_command 2>&1 | tee >(grep -Fq keyword && other_command)

2>&1当您还想捕获输出时,就需要它stderr,如果您不希望这样,请将其忽略。


在你的情况下,这应该有效:

ruby -run -e httpd -- -p 5000 . 2>&1 \
  | tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 

相关内容