$PROMPT_COMMAND
bashには、最後に実行されたコマンドと対応する戻りコードを記録するカスタムプログラムがあります。$?
パイプ命令では十分ではないことに気づくまで、後者を幸せに使用しました。私は${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
プロンプトコマンドの代わりにトラップハンドラ機能を使用しました。
答え2
まあ、おそらくbashのバージョンによって異なるかもしれません。
Bash プロファイル設定で次の簡単な割り当てを試してみましょう。
PROMPT_COMMAND="エコーステータス=$?"エクスポート
bash 4.1.2はうまく動作します。 Bashプロンプトで存在しないコマンドを入力しました。
ステータス=127
bash 3.2.25は常に印刷されます。
ステータス=0
コマンドラインで変数を確認します。
エコ $PROMPT_COMMAND
ワーカーホストは私の仕事に対応しています。他のホストでは、その値は次のようになります。
履歴記録-a;履歴記録-n;エコ状態=$?
なぜこれらのコマンドがありますか?彼らは問題の原因ですか?