是否可以在 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) 

相關內容