web-dev-qa-db-ja.com

入力したコマンドを実行せずに保存する方法は?

すべてのLinuxユーザーは、この面倒なことを経験しました。長く退屈なコマンドを入力し始めてから、前に別のコマンドを実行する必要があったことに気付きます。最初のものを保存して後で実行する方法は?

あなたはタイプし始める

mycommand -a -F --conf /very/long/path --and /another/one /input/file.txt

しかし、「Enter」を押す前に、あなたはcp f.txt /input/file.txt 最初は。

だから、あなたはあなたのコマンドで立ち往生しています、そしてあなたが押さなければ Enter bashの履歴を使用して元に戻すことはできません。

これを処理する最良の方法は何ですか?

55
user74488

ヒット CTRL-U (キルライン-これはシェルのキルリングにラインを保存します)、あなたがする必要があることを行い、次に新しいプロンプトで CTRL-Y (kill-ringからのヤンク)元のコマンドに戻ります。

または、whileループやforループなどのネストされたコマンドを使用している場合、これは特に便利です。 CTRL-Cコマンドを実行せずに履歴に追加して行をクリアするため、使用する準備ができたらシェルの履歴メカニズムを使用してコマンドを呼び出すことができます。

55
D_Bye

行をコメントにして、Enterキーを押します

Ctrl-A
#
Enter

だからあなたは歴史の中でその線を守ります

30
Emmanuel

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

28
arielCo

Emacsモードでzshを使用すると、 Alt+Q または Ctrl+QPush-lineウィジェット)、現在のコマンドラインをスタックにプッシュし(後で保存)、現在の入力バッファーをクリアします。

次に、別のコマンドを入力できます。その後、最後のプッシュコマンドが返されます(そのスタックからポップされます)。

7

特にコマンドを保存したい場合は、通常、エマニュエルが提案したことを行います。ただし、現在のコマンドの前に別のコマンドを入力するだけの場合は、保存する必要はありません。行の先頭に移動し、他のコマンドを入力してセミコロンを追加します。

Ctrl-Acp f.txt /input/file.txt ; Enter

これにより、両方のコマンドが必要な順序で実行されます。さらに、履歴に一緒に保存されるため、将来、2番目のコマンドを再度実行したい場合は、 Ctrl-R、最初のコマンドが表示され、前に実行する必要があることに注意してください(常に両方を同時に実行する必要がある場合)。

2番目のコマンドを実行したい場合は、セミコロンの代わりに&&を使用することもできますonly最初のコマンドが成功した場合。

2
msb