すべてのLinuxユーザーはこのような迷惑なことを経験しました。長くて退屈なコマンドを入力し始めましたが、早く別のコマンドを実行する必要があることに気づきました。後で実行するために最初の項目をどのように保存しますか?
はい
あなたは入力を始めます
mycommand -a -F --conf /very/long/path --and /another/one /input/file.txt
cp f.txt /input/file.txt
しかし、「Enter」を押す前に最初に作業を完了しておく必要があることに気付くでしょう。
したがって、コマンドが中断されてコマンドを押さないと、Enterbash履歴を使用して復元することはできません。
この問題を処理する最良の方法は何ですか?
答え1
Hit CTRL- U(キルライン - シェルのキルリングにラインを保存します)、何をすべきかを実行し、新しいプロンプトでCTRL- Y(キリングからプル)を押して元のコマンドを元に戻します。
while
または、入れ子になったコマンド(またはfor
ループなど)の場合CTRL- を押すと、Cコマンドを実行せずに履歴に追加して行を消去するため、記録メカニズムのシェルを使用して次の操作を実行できる場合に特に便利です。それを呼んでください:あなたはそれを使う準備ができました。
答え2
その行にコメントを付けてEnterを押します。
Ctrl-A
#
Enter
だからこのセリフを歴史に残してください。
答え3
BashとKornシェル(Emacsモード)でEsc- 最初にaを追加して[次へ]を押すのと#同じです。#
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:「#」を取得するには任意のキーを押す必要があるため、+または+ +を#押す必要があるかもしれません。EscShift3AltShift3
(@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
答え4
特にコマンドを保存したい場合は、通常Emmanuelのアドバイスに従います。ただし、現在のコマンドの前に別のコマンドを入力する場合は、そのコマンドを保存する必要はありません。行の先頭に移動して別のコマンドを入力し、セミコロンを追加します。
Ctrl-A cp f.txt /input/file.txt ;
Enter
これにより、任意の順序で2つのコマンドが実行されます。また、履歴に一緒に保存されるため、後で2番目のコマンドを再実行し、Ctrl-を使用してそのコマンドに到達すると、実行する前にR実行する必要があることを示す通知とともに最初のコマンドが表示されます。 (この場合は常に両方を実行する必要があります)。
&&
2番目のコマンドを実行するには、代わりにセミコロンを使用することもできます。ただ 初めて動作する場合。