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つの問題があります。
- 何らかの理由で、
grep -v 'bash'
は「bash」を含む行を除外していませんが、「bash」を含むgrep 'bash'
行のみが含まれる場合、なぜ一方が機能し、もう一方が機能しないのかわかりません。 - 各行/コマンドを文字列で区切ります。最後の
ls
コマンドはでなければなりませんが
ls nonexistentfile
、実行中でls
ありnonexistentfile
、個別のコマンドとして実行されています。
コマンドで何を調整する必要があるか、またはこれを実行する方法についてのアイデアはありますか?
ls #$CODE, ll #$CODE
、履歴出力を取得しました。うまくいくかどうかはわかりませんが、に変更sed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
する必要がありましたsed -i '\$s/\$/ \#$CODE/' $HISTFILE
。私は`` $ CODE前に出した