どういうわけか、元のコマンドに影響を与えることができました。つまり、編集によって元のコマンドが履歴に戻されます。
右。履歴をさかのぼって行を編集すると なし Return キーを押してコマンドを実行しますが、代わりに別の履歴エントリに移動すると、編集したことになります 履歴エントリ。次に履歴を一覧表示すると、 *
が表示されます 編集したことを示す行に。この「機能」は非常にイライラします。他の人はこれを再現する方法の良い例を提供しています.
私の目標はこれを回避することです。そのため、以前のコマンドに対する編集は常に履歴に追加され、元のコマンドが置き換えられることはありません。
私もそれを無効にしたかった。 unix.stackexchange でこの回答を介して解決策を見つけました。
要約すると、revert-all-at-newline
を有効にする必要があります。 デフォルトでオフになっている readline 設定。設定がオンの場合、bash は次のコマンドを実行したときに履歴に加えた変更を元に戻します。
シェルでこの設定を有効にするには、次を ~/.inputrc
に追加する必要があります ファイルを開き、シェルを再起動します:
$include /etc/inputrc
set revert-all-at-newline on
独自の .inputrc
を指定すると、最初の行が必要になると思います デフォルトの /etc/inputrc
をファイルします ファイルが含まれていません。これはおそらく必要なものではありません。
以前のコマンドに戻って編集しても、それを実行しない場合 (履歴コマンドを使用して別のコマンドに移動して実行する代わりに)、編集は履歴リストに残ります。
Ctrl + C を押す 、編集後、この動作に対抗します。元のコマンドはそのまま残ります。つまり、元のコマンドへの編集の記憶をキャンセルします。
これが私自身の答えです。可能であれば、修正するか、詳細を提供してください。
「vi」オプションが bash で設定されている場合 (「set -o vi」 -- 「vi スタイルのコマンドライン編集インターフェースを使用する」)、履歴からコマンドを編集する 2 つのモードがあります。
最初のモード (「基本」と呼びましょう) は、Backspace、Del、および文字キーを使用してすぐに編集を開始する場合です。
もう 1 つのモードは「vi モード」で、Esc を押すと入ります。
履歴をそのまま保持したい場合は、同じ編集で両方のモードを使用しないでください。 bash が正確にどのように機能するかはわかりませんが、次のように考えることができます:
<オール>