コマンドを入力していない場合は、Ubuntu端末にコマンドを保存する方法はありますか?

コマンドを入力していない場合は、Ubuntu端末にコマンドを保存する方法はありますか?

Ubuntuの端末にコマンドを保存する簡単な方法があるかどうか疑問に思います。シナリオは次のとおりです。

質問:

  1. [長い命令]を入力してください
  2. [長いコマンド]を実行する前に[他のコマンド]を実行する必要があることを忘れました。

#命令を単に前に付けて上下キー履歴に入れるよりも、後で簡単に使用できるように命令を保存できたらと思います。レジスタまたはクリップボードに直接保存することをお勧めします。

私はそれをエコーし​​たくないことを言及することを忘れた。

答え1

これはあなたではありません。端末、これはあなたですシェル

探しているシェルメカニズムの名前は次のとおりです。バッファ終了。人々はシェルコマンドラインエディタにこれらの機能があることを忘れています。 Bourne AgainシェルのGNU Readline、(FreeBSD) Almquistシェルのlibedit、Kornシェルのラインエディタ、TENEX Cシェルのラインエディタと同様に、ZシェルのZLEにはこれらの機能があります。

モードのすべてのシェルでemacs保存したい行の終わりに移動し、⎈ Control+を使用して終了バッファの先頭まで終了し、U中間コマンドを入力して実行し、⎈ Control+を使用して終了バッファの内容を抽出します。Y。中間コマンドを入力するときに出口バッファーに対して操作を行わないでください。

モードのZシェルでは、プレフィックスシーケンスを使用して行が終了する名前付きスタイルバッファを指定viできます。デフォルトバッファの代わりに他のバッファのいずれかを使用できます。 (モードでは)のようなものを使用してライン全体をバッファ「a」として削除し、中間コマンドを入力して実行し、そのバッファの内容を。vivi" a d dvicmd" a p

そのモードでは、viKornシェルのGNU Readline、Bourne Againシェル、および(FreeBSD)Almquistシェルのlibeditには名前付きviスタイルバッファがなく、単一のカットバッファしかありません。 d dそのバッファの行を削除し、pバッファの内容を 、 と一緒に入れます。ただし、vi中間コマンドを入力するときは、KillとYankingと同じスタイルバッファを使用します。

答え2

echoI / Oリダイレクトがある可能性があり、引き続き実行できるため、行に追加(または他のランダムタイプコマンド)を追加したくないので、準備が整うまでまだアクセスする必要があるファイルを上書きできます。コマンドを実行するため)。

代わりに、行の先頭に移動してコメント文字を入力してください#。次に、を押すと、その回線Enterが履歴に保存されます。

viモードの場合、kshとbash(少なくとも)には特定のコマンドがあります。コマンドモードに入り(押すEsc)適切な#文字を押します。

これは特にこのユースケースのためです。 O'Reillyのこのコマンドの説明Korn Shellを学ぶその本はこう言います。

行の前に#(コメント文字)を追加し、それを履歴ファイルに送信します。後で再入力する必要なく実行するコマンドを保存するのに役立ちます。行がすでに#で始まっている場合は、複数行のコマンドから改行文字の後の先行#とその他のコメント文字を削除します。

答え3

を実行している場合は、次のコマンドを使用してコマンドを実行zshできます。Ctrl-Qpush-line。現在の入力をスタックに保存してプロンプトを消去し、次のコマンドを入力してスタックをポップします。私はあなたが描いた状況を解決するためにこれを使用してきました。

答え4

シェルが次に設定されている場合Emacsモード(私はbashが通常デフォルトであると思います):

#set -o | grep emacs
emacs         on

その後、次のことができます。

<Ctrl>a or <arrowkeys> # to go to the beginning of the current line or to wherever you want
<Ctrl>k    # to "kill" the content from the cursor position to the end of the line + SAVE it
... here you type the command you forgot to add ...
<Ctrl>y    # to "yank" the SAVED line into the current editing line. or <Ctrl>p in ksh(??)
<Enter>    # to execute it

#note: you can also replace: <Ctrl>a<Ctrl>k with: <Ctrl>u # kills the whole line + SAVE it

これはすぐに行うことができ、習慣になります。 ctrl-kを使用して行の「終了」のみを保存することもできます(たとえば、後で再利用する2つの長い引数、必要に応じて「削除」(+保存)してから「コピー」することができます。

シェルがある場合モードでは、一般的なvimコマンドを使用できます。

<Esc>      # to go back to normal(command) mode, if you were in editing mode
dd         # to delete the whole current line + SAVE it  (see note below)
i          # to reenter editing mode
... here you type the command(s) you forgot ...
<Esc>      # to return to normal mode
p          # to paste the buffered line + place the cursor on top of the last character
a          # to reenter editing mode past that current character
<Enter>    # to execute it

# note: instead of "dd" (kill whole line) you can simulate emacs <Ctrl>a<Ctrl>k with:
#    | or h or l  # to go to the 1st char of the line or wherever # simulates <Ctrl>a or <arrow keys>
#    d$  # to delete from the current position to the end of the line + SAVE it # <Ctrl>k

関連情報