追加されたパラメータでコマンドを繰り返す方法

追加されたパラメータでコマンドを繰り返す方法

次のようにコマンドを繰り返し、コマンドの後にテキストを追加する方法を知っています!!

ls -l
!! tmp

2行目はに展開されますls -l tmp

しかし、単語の間にコマンドにパラメータを追加するにはどうすればよいですか?たとえば、次のようにした場合:

ls tmp

-l...その後、内容全体を再入力するか、上矢印キーを押して矢印キーを使用してカーソルを正しい位置に設定せずにコマンドにパラメータを追加したい場合がよくあります。無効に!! -lなるため動作しませんls tmp -l。 (実際にここで使用した簡単な例よりもコマンドがはるかに長いです。)

つまり、?? -lwhereが??前のコマンドを繰り返すが、-l最初の単語と2番目の単語の間に追加するものなどを探しています。


明確にするために、ls -l tmpこれは単純化された例にすぎません。実際のユースケースは同様の状況に近いです/very/long/path/to/very-long-command --with=a --very=long --parameter=list

答え1

!!:0は前のコマンドの0番目の単語で、!!:*0番目の単語を除くすべての単語です。

!!:0 -l !!:*

あなたが探しているコマンドです。

源泉https://www.gnu.org/software/bash/manual/bash.html#Word-Designators

答え2

あなたはできます:

$ ls -l
[..]
$ !:0* /tmp
[..]

次に、マンページをls -l /tmp参照してください。bash

   Word Designators
       Word designators are used to select desired words from the event.  A : separates the 
       event specification from the  word  designator.   It  may  be  omitted  if the word
       designator begins with a ^, $, *, -, or %.  Words are numbered from the beginning of
       the line, with the first word being denoted by 0 (zero).  Words are inserted into the
       current line separated by single spaces.

       0 (zero)
              The zeroth word.  For the shell, this is the command word.
       n      The nth word.
       ^      The first argument.  That is, word 1.
       $      The last argument.
       %      The word matched by the most recent `?string?' search.
       x-y    A range of words; `-y' abbreviates `0-y'.
       *      All of the words but the zeroth.  This is a synonym for `1-$'.  It is not an 
              error to use * if there is just one  word  in
              the event; the empty string is returned in that case.
       x*     Abbreviates x-$.
       x-     Abbreviates x-$ like x*, but omits the last word.

       If a word designator is supplied without an event specification, the previous command
       is used as the event.

答え3

Bashを使用すると、プロンプトで履歴からコマンドをすばやく検索して返すことができ、実行する前に手動で編集できます。

プロンプトによると:

  1. ~によるとCtrl-R(図反転):現在の反転モードになっていることを知らせるために、プロンプトを変更する必要があります。
  2. コマンドの任意の部分を入力し始めます(例えば、またはmatchを入力することもできますlstmpmp入力ls tmpすると、キーストロークと一致する最後のコマンドが表示されます。
  3. コマンドが見つかったら、tab通常のプロンプトでそのコマンドを入力するだけです。まだ実行されておらず、ここでパラメータの追加、削除、変更、その他のコマンドの適用などの修正を待っています。同じファイルが待っています。

答え4

前のコマンドを起動し、コマンド名の直後にオプションを追加するには、次のキーを押します。
Up Home Ctrl+ Right Space(オプション入力)Enter

カーソルキーがシステムで動作しない場合は、代わりにEmacsアクションキーを使用できます。
Ctrl+++ P Ctrl(入力オプションA Meta)F SpaceEnter

コマンド名に複数の単語が含まれている場合(たとえば、スラッシュがあるパスなど)、Ctrl+はRight最初のスラッシュを過ぎて移動します。代わりに、最初のスペースを検索します。

Up Home Ctrl+ S Space Esc Space(入力オプション) Enter
Ctrl+++ (入力P CtrlオプションA Ctrl)S Space Esc SpaceEnter

この検索を使用すると、++ではなくUp UpUp HomeまたはCtrl++の代わりに始めることができます。キー入力の数は同じですが、入力は少し簡単ですが、直感的ではありません。P CtrlPCtrlP CtrlA

必要に応じて使用できます歴史的な代替施設、コマンドにスラッシュが含まれていると、キー入力の数が減ります。
^ ^ --option 
オプションの後のスペースに注意してください。コマンドの最初のスペースをスペース、新しいオプション、その他のスペースで置き換えます。

関連情報