bashのパイプの使い方を再確認

bashのパイプの詳しい使用方法についてmanを見て今まで知らなかった使い方をまとめてみました。

●書式
[time [-p]] [ ! ] command [ [| or |&] command2 … ]
 
●time
 
timeを指定するとコマンド実行に要した経過時間がsystemとuserの内訳とともに表示されます。

$ time rpm -qa | tail
kernel-firmware-2.6.32-431.17.1.el6.noarch
xkeyboard-config-2.6-6.el6.noarch
DeviceKit-power-014-3.el6.x86_64
  :
real 0m0.581s
user 0m0.550s
sys 0m0.032s

 
※-pオプションを指定するとPOSIXの出力フォーマットになります。
 
$ time -p rpm -qa | tail
kernel-firmware-2.6.32-431.17.1.el6.noarch
xkeyboard-config-2.6-6.el6.noarch
DeviceKit-power-014-3.el6.x86_64
  :
real 0.59
user 0.55
sys 0.03

 
●exitステータスコード
 
通常は、パイプで指定した複数のコマンドの最後のコマンドのexitステータスコードが表示されます。
 
すべてのコマンドが0の場合のみ0が返るように挙動を変更する場合には、pipefailオプションを使用します。
 
$ rpm -ql aaa | head
パッケージ aaa はインストールされていません。
$ echo $?
0
 
$ set -o pipefail
$ rpm -ql aaa | head
パッケージ aaa はインストールされていません。
$ echo $?
1
 
●標準エラーもパイプする
 
標準エラーもパイプする場合は、”|&”を指定します。
 
$ rpm -ql aaa |& tail

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です