老胡的看法:
pipeline是我們使用Linux的日常操作,一般來說使用pipeline是為了簡化交互流程,目的在于得到最后的結果。缺點就是在設計pipeline語句的時候,只能看到最后的輸出值,不太方便調試。老胡在這里給出幾個辦法,可以輸出pipeline中每一個階段語句的返回值:
一、使用shell選項pipefail
pipefail是ksh、zsh和bash中都使用的一個shell選項,它的作用是告訴shell輸出pipeline中未成功執行返回的其它狀態值。這大概是最簡單最方便的一個方式了。不過這個方法的缺點是
使用的方法是在shell中用set指令指定這個選項:
set-opipefail
二、使用shell變量$PIPESTATUS
shell有一個內置變量,它是一個數組,用來存放pipeline中每一段的返回狀態,bash中的變量名字是大寫,zsh中是小寫的$pipestatus。如果我們想獲取pipeline中每一段的返回狀態,只需要按照訪問數組的方式訪問$PIPESTATUS就可以了。如果想要得到所有段的返回值,數組下標使用@:
三、利用輸出重定向
在多段pipeline中,我們還可以利用打印語句和輸出重定向來實現每一段的pipeline返回值輸出。具體思路是:
打開1個文件描述符,并重定向到標準輸出;
設計pipeline,將需要的段中命令返回值輸出到新描述符;
其余段的命令返回值均使用類似的方式輸出到新描述符;
將新描述符重定向到先前聲明的描述符;
比如:
本文為作者原創,嚴禁轉載,違者必究。