回覆列表
  • 1 # 產品經理老胡

    老胡的看法:

    pipeline是我們使用Linux的日常操作,一般來說使用pipeline是為了簡化互動流程,目的在於得到最後的結果。缺點就是在設計pipeline語句的時候,只能看到最後的輸出值,不太方便除錯。老胡在這裡給出幾個辦法,可以輸出pipeline中每一個階段語句的返回值:

    一、使用shell選項pipefail

    pipefail是ksh、zsh和bash中都使用的一個shell選項,它的作用是告訴shell輸出pipeline中未成功執行返回的其它狀態值。這大概是最簡單最方便的一個方式了。不過這個方法的缺點是隻能輸出pipeline中最後一段返回值不為0的值。

    使用的方法是在shell中用set指令指定這個選項:

    set -o pipefail二、使用shell變數$PIPESTATUS

    shell有一個內建變數,它是一個數組,用來存放pipeline中每一段的返回狀態,bash中的變數名字是大寫,zsh中是小寫的$pipestatus。如果我們想獲取pipeline中每一段的返回狀態,只需要按照訪問陣列的方式訪問$PIPESTATUS就可以了。如果想要得到所有段的返回值,陣列下標使用@:

    三、利用輸出重定向

    在多段pipeline中,我們還可以利用列印語句和輸出重定向來實現每一段的pipeline返回值輸出。具體思路是:

    開啟1個檔案描述符,並重定向到標準輸出;

    設計pipeline,將需要的段中命令返回值輸出到新描述符;

    其餘段的命令返回值均使用類似的方式輸出到新描述符;

    將新描述符重定向到先前宣告的描述符;

    比如:

    總結一下,關於pipeline各段命令返回值的輸出,老胡大致上就這麼幾個思路了。另外還有比較妥協的辦法,那就是把各段先分拆開逐個除錯,不過這樣做明顯工作量太大了比較累。老胡建議用第二種方式是最舒服最安逸的,並且bash和zsh這兩種主流的shell都有支援。

  • 中秋節和大豐收的關聯?
  • 7.5千瓦電機距離600米鋁芯線徑多少?如何計算的?(線上等待)?