すべてのLinuxユーザーは、この面倒なことを経験しました。長く退屈なコマンドを入力し始めてから、前に別のコマンドを実行する必要があったことに気付きます。最初のものを保存して後で実行する方法は?
あなたはタイプし始める
mycommand -a -F --conf /very/long/path --and /another/one /input/file.txt
しかし、「Enter」を押す前に、あなたはcp f.txt /input/file.txt
最初は。
だから、あなたはあなたのコマンドで立ち往生しています、そしてあなたが押さなければ Enter bashの履歴を使用して元に戻すことはできません。
これを処理する最良の方法は何ですか?
ヒット CTRL-U (キルライン-これはシェルのキルリングにラインを保存します)、あなたがする必要があることを行い、次に新しいプロンプトで CTRL-Y (kill-ringからのヤンク)元のコマンドに戻ります。
または、while
ループやfor
ループなどのネストされたコマンドを使用している場合、これは特に便利です。 CTRL-Cコマンドを実行せずに履歴に追加して行をクリアするため、使用する準備ができたらシェルの履歴メカニズムを使用してコマンドを呼び出すことができます。
行をコメントにして、Enterキーを押します
Ctrl-A
#
Enter
だからあなたは歴史の中でその線を守ります
BashとKornシェル(Emacsモード) Esc-# 最初に#
を付けて Enter:
例:
$ find /{,usr/}{,s}bin/ -type f -ls | awk '$3~/^...s/' | nl
Esc# ;
$ #find /{,usr/}{,s}bin/ -type f -ls | awk '$3~/^...s/' | nl
$ _
注記
1:一部の端末では、 Alt+whatever 和音は別の送信方法です Esc に続く whatever
2: # 「#」を取得するために押す必要があるものは何でも意味するので、押す必要があるかもしれません Esc その後 Shift+3 または Alt+Shift+3
(@viありがとうございます)
カスタマイズ
Bashでは、次のような行を.inputrc
に追加して、プレフィックスを制御できます。
set comment-begin "## "
(引用符は、先頭または末尾に空白がある場合にのみ必要です)
別のバインディングを設定してデフォルトのバインドを解除することもできます Esc-#:
"\e'": insert-comment
"\e#": nop
https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html
Emacsモードでzsh
を使用すると、 Alt+Q または Ctrl+Q (Push-line
ウィジェット)、現在のコマンドラインをスタックにプッシュし(後で保存)、現在の入力バッファーをクリアします。
次に、別のコマンドを入力できます。その後、最後のプッシュコマンドが返されます(そのスタックからポップされます)。
特にコマンドを保存したい場合は、通常、エマニュエルが提案したことを行います。ただし、現在のコマンドの前に別のコマンドを入力するだけの場合は、保存する必要はありません。行の先頭に移動し、他のコマンドを入力してセミコロンを追加します。
Ctrl-Acp f.txt /input/file.txt ;
Enter
これにより、両方のコマンドが必要な順序で実行されます。さらに、履歴に一緒に保存されるため、将来、2番目のコマンドを再度実行したい場合は、 Ctrl-R、最初のコマンドが表示され、前に実行する必要があることに注意してください(常に両方を同時に実行する必要がある場合)。
2番目のコマンドを実行したい場合は、セミコロンの代わりに&&
を使用することもできますonly最初のコマンドが成功した場合。