Bash履歴からアイテムを削除するとエラーが発生するのはなぜですか?

Bash履歴からアイテムを削除するとエラーが発生するのはなぜですか?

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 -d1つずつコマンドに送信すると思いました。

このエラーの原因は何ですか?

気づく:私は履歴を削除する他の方法があることを知っています。質問は、純粋にxargsそれがどのように機能するのか、私が何を間違ってエラーを引き起こすのかを理解することです。

ベストアンサー1

historyxargsがコマンドを見つけることができないため、エラーが発生します。確認に使用できる組み込みシェルなので、type historyxargs には表示されません。努力する

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 {}

historyBashシェルですべての組み込みコマンドが使用可能になっても、上記のコマンドはエラーを発生させません。しかし、同じコマンドでHISTFILE設定されておらず、history何も出力しないという事実も見つかりました。非対話型シェルでは、記録は有効になりません。繰り返しますが、set組み込み機能を使用してエクスポートしてHISTFILE有効にすることはできますが、HISTFILESIZE面倒なことはしたくありません。.bash_history直接編集最も簡単な方法です。

おすすめ記事