2016-03-27 58 views
0

我有一個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,然後檢查輸出的長度,這很好。

+2

首先,'grep -q'不會輸出任何內容,所以試圖通過'$('...')捕獲它的輸出是沒有意義的。使用它的方式就像'if forever list | grep -q'process/index.js';然後' –

+1

第二,我不能再現問題 - 無論寫入終端,'grep'進程沒有'-q','grep'進程使用'-q',一個文件,'forever list'都成功完成。 –

回答

1

嘗試是這樣的:

forever list | grep -q 'process/index.js' 
if [ $? -eq 0 ]; then 
    echo 'Processes are running' 
else 
    echo 'Processes are not running' 
fi 

grep的-q說,不要寫任何東西到標準輸出。

$?用於查找上次執行的命令的返回值。

+1

'=='是非標準的,不應該和'['一起使用。你可以使用'如果永遠列表| | grep -q'process/index.js'',而不是檢查'$?'。 –

+0

爲了體現這一點而採取的措施和編碼。你也說得對,如果永遠列出| grep -q'process/index.js'。 –

相關問題