Bash履歴からいくつかのコマンドを削除したいです。
見つけてhistory | grep "command with password"
削除できます。history -d <line-number>
ただし、パイプを介して一括削除しようとすると、xargs
次のエラーが発生します。
history | grep "command with password" | awk '{print $1}' | sort -r | xargs history -d
xargs: history: No such file or directory
私はこれがxargs
行番号のリストを繰り返してhistory -d
1つずつコマンドに送信すると思いました。
このエラーの原因は何ですか?
気づく:私は履歴を削除する他の方法があることを知っています。質問は、純粋にxargs
それがどのように機能するのか、私が何を間違ってエラーを引き起こすのかを理解することです。
ベストアンサー1
history
xargsがコマンドを見つけることができないため、エラーが発生します。確認に使用できる組み込みシェルなので、type history
xargs には表示されません。努力する
echo 1 | xargs history -d; echo $?
戻り値は127です。man xargs
、終了ステータスセクション:
0 if it succeeds
123 if any invocation of the command exited with status 1-125
124 if the command exited with status 255
125 if the command is killed by a signal
126 if the command cannot be run
127 if the command is not found
1 if some other error occurred.
拡大するイルカチュの口コミ、原則としてBashを呼び出し、history
結果シェルから呼び出すことができます。
echo 1 | xargs -I {} bash -c 'echo $HISTFILE; history' bash {}
history
Bashシェルですべての組み込みコマンドが使用可能になっても、上記のコマンドはエラーを発生させません。しかし、同じコマンドでHISTFILE
設定されておらず、history
何も出力しないという事実も見つかりました。非対話型シェルでは、記録は有効になりません。繰り返しますが、set
組み込み機能を使用してエクスポートしてHISTFILE
有効にすることはできますが、HISTFILESIZE
面倒なことはしたくありません。.bash_history
直接編集最も簡単な方法です。