欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Linux中,如何取得pipeline中每一個命令的返回值?

錢良釵2年前13瀏覽0評論

老胡的看法:

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

一、使用shell選項pipefail

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

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

set-opipefail

二、使用shell變量$PIPESTATUS

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

三、利用輸出重定向

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

  • 打開1個文件描述符,并重定向到標準輸出;

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

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

  • 將新描述符重定向到先前聲明的描述符;

比如:

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


如果我的回答對你有點價值,請莫忘點贊加關注,謝謝!歡迎在評論區發表各種意見。

本文為作者原創,嚴禁轉載,違者必究。