履歴 - 正常に実行されたコマンドのみを一覧表示します。

履歴 - 正常に実行されたコマンドのみを一覧表示します。

もし活用方法がないのかと思いました。歴史コマンドを実行したが正常に実行されたコマンドのみをリストします。同様に、エラーが発生したエラーを一覧表示する方法はありますか?

各コマンドの終了状態は次のとおりです。

0- コマンドの実行成功
1- 拡張またはリダイレクト中のエラーのため、ゼロより大きいシャットダウン状態でコマンドが失敗しました。
2- コマンドが無効になっている
12- コマンドが見つかりましたが実行できません - コマンドが見つかりませ
127

次のコマンドで確認できますecho $?
から: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html

例:

次の4つのコマンドを実行した後:

ls
help
lss
ls nonexistentfile

「ls」と「help」のみが必要な成功したコマンド(終了ステータス0)のみを印刷するためにテストを試みました。

for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out

この出力は次のようになります。

ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found

これはある程度動作しますが、2つの問題があります。

  1. 何らかの理由でgrep -v 'bash'「bash」を含む行は除外されませんが、これはgrep 'bash'「bash」を含む行だけを含み、なぜ1つは機能し、もう1つは機能しないのかわかりません。
  2. 各行/コマンドを文字列で区切ります。最後lsのコマンドは必要
    ls nonexistentfileですが、別のコマンドでls実行されています。nonexistentfile

コマンドで何を調整する必要があるのか​​、どうすればよいのかご存知ですか?

ベストアンサー1

誰が何をしたのかを追跡するために共有アカウントで使用したトリックは次のとおりです。

PROMPT_COMMAND="history -a; sed -i '\$s/\$/ \#$NAME/' $HISTFILE; history -r; $PROMPT_COMMAND"

historyこれは表示前に記録されますPROMPT。実際には各コマンドの後に記録されます。以下を使用して、履歴に終了コードを保存するように変更できます。

PROMPT_COMMAND="CODE=$?; history -a; sed -i '\$s/\$/ \#\$CODE/' $HISTFILE; history -r; $PROMPT_COMMAND"

これにより、履歴に次の項目が残ります。

$ history 2
 1271  vim .bashrc #0
 1272  history 2

(最後の項目が更新されます。後ろにコマンドがhistory終了するため、この出力に終了コードは表示されません。 )

これにより、プロンプトの記録にコメントが追加されるという面倒な効果があります。

$ # press up
$ history 2 #0

コメントは通常、実行や出力には影響しませんが、編集が難しくなります。

これでgrep、履歴を使用して、どのコードが正常に終了したかを確認できます。

history | grep '#0$'
# or grep '#[^0]*$' for unsuccessful commands.

おすすめ記事