history-正常に実行されたコマンドのみをリストします


10

historyコマンドを使用する方法はあるのでしょうか。ただし、正常に実行されたコマンドのみをリストします。同様に、エラーを生成したものをリストする方法はありますか?

各コマンドの終了ステータスは次のとおりです。

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

成功したコマンド(終了ステータス0)のみを出力するようにテストしてみましたが、これは「ls」と「help」だけであるはずです。

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」を含む行を除外していませんが、「bash」を含むgrep 'bash'行のみが含まれる場合、なぜ一方が機能し、もう一方が機能しないのかわかりません。
  2. 各行/コマンドを文字列で区切ります。最後のlsコマンドはでなければなりませんが
    ls nonexistentfile、実行中でlsありnonexistentfile、個別のコマンドとして実行されています。

コマンドで何を調整する必要があるか、またはこれを実行する方法についてのアイデアはありますか?

回答:


4

これは私が共有アカウントで一度使用したハッキン​​グで、誰が何をしたかを追跡しました。

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.

MobaxtermとPuttyの両方で試してみてls #$CODE, ll #$CODE、履歴出力を取得しました。うまくいくかどうかはわかりませんが、に変更sed -i '\$s/\$/ \#\$CODE/' $HISTFILE'する必要がありましたsed -i '\$s/\$/ \#$CODE/' $HISTFILE。私は`` $ CODE前に出した
lkisac

@lkisac奇妙なことに、それは#エスケープなしで(コードなしで)与えました。いくつかの引用の問題でなければなりません。
muru、2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.