我有一個bash腳本,用於檢查某些永久進程是否正在運行。該腳本基本上是:Ubuntu使用-q標誌grep時出現EPIPE錯誤
#!/bin/bash
processIsRunning=$(forever list | grep -q 'process/index.js')
if [ -n $processIsRunning]; then
echo 'Processes are running'
else
echo 'Processes are not running'
fi
我雖然得到這個錯誤:
events.js:72
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at errnoException (net.js:904:11)
at Object.afterWrite (net.js:720:19)
如果我從我的grep命令第3行中刪除「-q」標誌,那麼我沒有得到一個錯誤管,但我得到一個關於它的錯誤試圖運行grep結果作爲命令,而不是檢查輸出的長度是否大於0. 有誰知道爲什麼-q參數會導致EPIPE錯誤?
基於評論的更新: 我的錯誤,我很新的bash,並試圖學習如何使用if語句。我原本是直接在if語句中,但是將它拿出來放入一個變量中,因爲它沒有工作(事實證明由於缺乏空格,沒有意識到它們是bash中的要求)。我顯然沒有把它正確地移植出來。我目前只使用grep而不使用-q,然後檢查輸出的長度,這很好。
首先,'grep -q'不會輸出任何內容,所以試圖通過'$('...')捕獲它的輸出是沒有意義的。使用它的方式就像'if forever list | grep -q'process/index.js';然後' –
第二,我不能再現問題 - 無論寫入終端,'grep'進程沒有'-q','grep'進程使用'-q',一個文件,'forever list'都成功完成。 –