PROMPT_COMMAND実行中にPIPESTATUSを確認するには?

PROMPT_COMMAND実行中にPIPESTATUSを確認するには?

$PROMPT_COMMANDbashには、最後に実行されたコマンドと対応する戻りコードを記録するカスタムプログラムがあります。$?パイプ命令では十分ではないことに気づくまで、後者を幸せに使用しました。私は${PIPESTATUS[@]}それを文書化する必要があると思いました。

残念ながら$PIPESTATUSすでに設定されているようです後ろに呼ぶ$PROMPT_COMMAND。お持ちですか?いたずら実行中にこの情報にアクセスするために使用できますか$PROMPT_COMMAND

ベストアンサー1

コマンド機能はプロンプトコマンドで変更され、PIPESTATUSプロンプトコマンドの後にbash保存および復元(および)PIPESTATUSされます。参考$?ここで予想される動作の説明があります。

秘密は、次の場所に保存$PIPESTATUS[](および/または$?)することです。最初の声明関数の値。それ以降は元の値を上書きします。

function myprompt() {
   _pipestatus=( "${PIPESTATUS[@]}" )
   echo "current: ${PIPESTATUS[@]}"
   echo "cached : ${_pipestatus[@]}"
}

PROMPT_COMMAND=myprompt

それから:

$ true | false | true
current: 0
cached : 0 1 0

説明したのと同様の操作を行いましたが、ERRプロンプトコマンドの代わりにトラップハンドラ機能を使用しました。

おすすめ記事