「危険な」コマンドがbash履歴に書き込まれるのを防ぐために、ファイルに次の行を追加しました.bashrc
。
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
これはうまく機能しますが、副作用があります。コンピュータで実行されたコマンドの完全な履歴を表示できません。実験用コンピュータがいくつかあり、実行されているすべてのコマンドを表示できるようにしたいとします。 bashの内部を使用してhistory
実行されたコマンドを表示し、grepを使用して今日の日付を表示することもできます。
history | grep Sep-28
私がしたいのは、「危険な」コマンドも記録しますが、誤ってレコード#
からコマンドを実行しても破損が発生しないように、行の先頭に1つを入れることです。
これが可能かどうかわかりません。
アップデートと説明:
これが私にとって問題となる主な理由は、通常、複数の端末から自分のコンピュータに接続し、ある端末で実行されたすべてのコマンドがすぐに別の端末の履歴に読み込まれるためです。これは以下によって達成される。
PROMPT_COMMAND="history -a; history -c; history -r"
2つの端末が開いているとしましょう。そのうちの1つでcat /dev/foo > file.out
いくつかのプロセスを実行しています。 2番目のステップでは、チェックの進行状況を使用しますls -lAhF
。 and(つまり、履歴の最後のコマンド)をls
押して繰り返し続けます。最初のコマンドが完了すると、記録の最後のコマンドではなくなります。注意しない場合は、catを再起動してfile.outを上書きします。UpENTERls
cat /dev/foo > file.out
#
私が達成したいのは、実行されないようにcatコマンドの前にaを置くことです。ただし、履歴にはまだ表示され、コメントを削除して再利用できます(長いコマンドの場合)。
ベストアンサー1
あなたの質問に正確に答えることはありませんが、あなたの問題に対する代替ソリューションを提供することもできます。
私が正しく理解した場合は、入力中に発生する可能性がある間違いを心配しています。たとえば、履歴の前のコマンドが保持したい項目を削除した!rm
場合です。rm
この場合は良い強く打つオプションはですhistverify
。shopt -s histverify
bangでコマンドを呼び出すと、!
すぐには実行されずにreadlineにロードされ、実行するかどうかを判断でき、編集も可能です。
試してみてください:
いいえ
histverify
:$ touch some_foo $ rm some_foo $ touch some_foo $ !rm rm some_foo $ # oooops in fact I'd've like to keep it this time
そして
histverify
:$ shopt -s histverify $ touch some_foo $ rm some_foo $ touch some_foo $ !rm $ rm some_foo <cursor here>
この場合、カーソルは行の末尾にあり、再起動または編集できます。
このオプションが好きな場合は、次の項目に入力してください.bashrc
。
shopt -s histverify