UNIXシステムでは、上矢印と下矢印を押して前のコマンドに移動できます。これはとても便利です。
時には再利用したいコマンドを見つけますが、少し変更が必要です。そのように変更すると、チェックインしない限り元のコマンドを元に戻すことはできませんhistory
。
キーストロークでアクセスした履歴からコマンド変更を「元に戻す」方法はありますか?
#
現在の回避策は、コマンドの前に を追加することです。これにより、現在のコマンドがコメントとして実行されるため、何も起こりません。その後、キーストロークナビゲーションコマンドを再利用できます。問題は、私が使用しているコマンドがおそらくリストのはるかに下にあるということです。 Control+R も解決策ではありません。なぜなら、私が正確に何を探しているのか覚えていないからです。
はい
次の「50コマンド前」と入力しました。
ls -l /etc/httpd/conf/
次に、その行に移動して次に変更します。
ls -l /etc/init.d/
ところで、エンターキーが押されていません。もう一度申し上げたいですls -l /etc/httpd/conf/
。
私の環境
$ echo $SHELL
/bin/bash
$ echo $TERM
xterm
答え1
履歴項目を編集してもまだ押されていない場合は、Enter元の項目に戻るには、変更がなくなるまでCtrl+ _(コマンド)を繰り返し押します。undo
元の項目に戻ります。
答え2
元のコマンドに戻す行を複数回変更した場合:
revert-line (M-r)
Undo all changes made to this line. This is like
executing the undo command enough times to get back to the beginning.
M
メタキーです。つまりalt</kbd+r for me.
無料だが役に立つ情報
時持つ以前にOPなどのコマンドを実行した後、コマンドが実行されてから何も「元に戻す」ことはできません。GNUリードライン図書館に書かなかった$HISTFILE
シェルが終了するまで。私がこれを言及する理由は、期待しているgrep
ことを実行できず、$HISTFILE
シェルを終了するのが理想的ではないかもしれないからです。
したがって、以前のreadlineコマンドのすべてを後ろにスクロールするのを防ぐのに役立ついくつかのオプションがあります。
まだいくつかの命令を覚えているなら、ctrl+を押してr覚えている内容を入力してください。前のコマンドの検索この文字列を含みます。ctrl+をもう一度押すと、r次の最新のリバース検索が表示されます。
たとえば、探している以前のコマンドを見つけるには、ls -l
then ctrl+を数回入力します。r過去にスクロールすると、ctrl+sは現在の場所から前方に検索します。
bashfc
組み込みコマンド前のreadlineコマンドでインデックス番号を一覧表示すると便利です。
fc -l -100
readline の前の 100 個のコマンドがリストされます。
また、OPが前のコマンドを探していることがわかっている場合は、ls -l
出力を次にgrep
パイプすることもできます。fc -l -100 | grep 'ls -l'
ls -l
これにより、インデックス番号の前に前のコマンドのリストが出力されます。出力は次のとおりです。
2065 ls -l
これで、インデックス番号が!n
どこにあるかを示すイベントインジケータを使用できます。n
この例では、実行!2065
がls -l
。
後で役に立ちませんが、前のコマンドを変更するときに最近のコマンド履歴を保存したい人は、履歴を上書きせずに前のコマンドを変更するいくつかの代替方法をHISTORY EXPANSION
検討する必要がありますman bash
。
このEvent Designators
セクションでは、最近使用したコマンドで文字列を簡単に編集する方法を説明します。
^string1^string2^
Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to
``!!:s/string1/string2/'' (see Modifiers below).
例:
$ echo foo
foo
$ ^foo^bar
echo bar
bar
これで最近のコマンドが表示されます。
echo foo
echo bar
sed
上記の例では、イベントインジケータで置換文字列を使用する方法についても説明します。
!-n Refer to the current command minus n.
したがって、履歴に3つのコマンドがある場合は、echo foo
次のようにします。
!-3:s/foo/bar
コマンドが実行されると、イベントインジケータが履歴に表示されます(この場合は)echo bar
。それは歴史にそれ自体として現れないでしょう!-3:s/foo/bar
。
OPが探している「元に戻す」ソリューションよりも「しないでください」に近い場合でも、密接に関連しているように見えるので、これをスローします。
答え3
行変数の読み取りrevert-all-at-newline
Bash 4.0/Readline 6.0 から利用可能で、ほぼ期待通りに動作します。
設定されている場合は、任意の行(他のコマンドでも空の行でも)でEnterキーを押すと、編集されたが実行されていないすべての履歴エントリが復元されます(質問の例に示すように)。
これは次のように設定できます。
set revert-all-at-newline on
存在する~/.inputrc
。
または
bind 'set revert-all-at-newline on'
存在する~/.bashrc
。