在bash中對應於pipefail的破折號外殼中是否有類似的選項?相當於破折號外殼中的pipefail
或者,如果管道中的某個命令失敗(但不會在其上設置-e會退出),則獲取非零狀態的任何其他方式。
使其更清晰,這裏是什麼,我想實現一個例子:
在樣品調試的makefile,我的規則是這樣的:
set -o pipefail; gcc -Wall $$f.c -o $$f 2>&1 | tee err; if [ $$? -ne 0 ]; then vim -o $$f.c err; ./$$f; fi;
基本上它運行打開文件時出錯和錯誤的源文件,並在沒有錯誤時運行程序。保存我一些打字。上面的代碼片段在bash上運行良好,但是我的新版Ubunty系統使用的短劃線似乎不支持pipefail選項。
我基本上要失敗的狀態,如果低於命令組的第一部分失敗:
gcc -Wall $$f.c -o $$f 2>&1 | tee err
,這樣我可以使用的IF語句。
有沒有其他的方法來實現它?
謝謝!
爲什麼不乾脆擺脫'tee'的? '如果gcc -Wall $$ f.c -o $$ f> $$ f.log 2>&1;然後cat $$ f.log; ./$$f; else vim -o $$ f.c $$ f.log; (或者,在Ubunty上安裝'bash',它只是一個易於獲取的版本。) – rici
@rici謝謝!我正在使用T恤,因爲我還希望將stderr輸出打印到屏幕上 - 主要是查看是否有任何警告。但如果沒有其他方法,我可能會改用你的建議。關於安裝bash:我假設(沒有任何研究)dash從bash向前邁進了一步,所以我不想切換回去,但現在看起來可能不一定是這樣。我會更詳細地瞭解這些差異,然後再作出決定。再次感謝您的指點! – Lavya
我希望上面提到的set -e會給我提供set -o pipefail的破折號,但不是這樣的: '$ dash -c'set -e; false |貓'; echo $? $' –