簡體   English   中英

管道通過bash或雙管道輸出,|| 表達?

[英]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)時執行的&&
  • 並清除OUT

喬伊·赫斯(Joey Hess)的moreutils具有一個命令chronial chronic(1) ,它可以精確地執行您想要的操作:它運行一條命令,吃掉它的stdoutstderr除非該命令退出非零值, 否則輸出將通過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM