PROMPT_COMMAND を使用した最後のコマンドの終了ステータス

PROMPT_COMMAND を使用した最後のコマンドの終了ステータス

最後のコマンド実行の終了状態を保存したいのですが(ファイル、変数、関係ありません)、この操作は対話型シェルで自動的に実行する必要があり、同様のコマンドを手動で実行することはvar=$?オプションではありません。

PROMPT_COMMAND私はこの仕事にそれを使うことにしました。以下で、私が試したことがうまくいかないことを示すことがわかります。

/home/exit_status$ export PROMPT_COMMAND="echo $?"                           
0                                                                   
/home/exit_status$ rm /                                                      
rm: cannot remove ‘/’: Is a directory                               
0                                                                   
/home/exit_status$ echo $?                                                   
1                                                                   
0

上記のコードが期待どおりに機能するようにするにはどうすればよいですか?アーカイブする方法を見つけることができるので、助けは必要ありません。私は文脈を提供するためにこれを言及しました。

ベストアンサー1

二重引用符を使用したため、$?値を割り当てると拡張されます。以下を使用してこれを確認できますset -x

$ PROMPT_COMMAND="echo $?"
+ PROMPT_COMMAND='echo 0'
++ echo 0
0

二重引用符を一重引用符に変更すると、目的の動作が得られます。

$ PROMPT_COMMAND='echo $?'
+ PROMPT_COMMAND='echo $?'
++ echo 0
0

つまり

$ set +x
+ set +x
0
$ ls nofile
ls: cannot access 'nofile': No such file or directory
2

おすすめ記事