[英]Pipe output through a bash or, double pipe, || expression?
我有一個嘈雜的命令,我想在成功時隱藏其輸出。 但是,在失敗的情況下,該輸出可能對調試很有幫助,因此我想在打印錯誤消息之前先進行顯示。
目前,我以這種方式進行操作:
OUTPUT=$( cmd1 2>&1 ) || {
echo $OUTPUT
echo cmd1 failed
exit 1
}
是否可以將cmd1
的輸出通過||
傳遞給 (或雙管道),這樣就可以避免為輸出創建變量?
您需要將命令的輸出保存在某處,因為直到命令完成后才知道是否將輸出發送到控制台。 由於管道沒有大的緩沖區,因此將輸出管道輸送到某些對象將無濟於事。
您可以選擇幾種緩沖方式,但是如果您不希望輸出兆字節(超出了noisy
的定義),則使用變量是一個合理的選擇。 您也可以使用一個臨時文件,但是這樣做沒有什么好處,除非您打算在內存非常有限的系統上部署(按照當今的標准)。
嘗試:
OUT=$(command....) && OUT= || { echo $OUT; exit 1;}
OK
(退出0)時執行的&&
喬伊·赫斯(Joey Hess)的moreutils具有一個命令chronial chronic(1)
,它可以精確地執行您想要的操作:它運行一條命令,吃掉它的stdout
和stderr
, 除非該命令退出非零值, 否則輸出將通過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.