最新のコマンドの最初のパラメーターを置き換える方法は?

5
2022.01.03

このようなターミナルでコマンドを実行すると

$ tyop --count 3 --exact haveibeenpwned

コマンドは、たとえばエラーコードで返されます

command not found: tyop

コマンドライン引数--count 3 --exact haveibeenpwnedを別のコマンド名(たとえば、 typoではなくtyop )のままにして、最後のコマンドを再実行するにはどうすればよいですか?

 $ typo --count 3 --exact haveibeenpwned

可能であれば、ショートカット、または!!!^などのシェル関数を探しています。

回答
11
2022.01.03
typo !*

man 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.

   *      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.
9
2022.01.03

上矢印キーを押して入力行を手動で編集するなどの明らかな機能に加えて、 GNU Readlinebashや他のいくつかのプログラムで使用される)には、便利な履歴編集機能が組み込まれています。他の回答で言及されている!*もその1つです。

もう1つは、^を使用した文字列置換機能です。 man bashから:

^string1^string2^

迅速な代替。前のコマンドを繰り返し、string1を次のように置き換えます
string2。 !!:s^string1^string2^と等価(以下修飾子を参照してください)。

これを使用すると、と入力してEnterキーを押すことで、コマンドを修正できます。

bashの歴史でできること以上のことがたくさんあります。ファイル名を指定して実行man bashHISTORY EXPANSIONを検索し、そのセクションとすべてのサブセクション(、Word Designators、およびModifiers)をお読みください。

ところで、という見出しのセクションを読むか、少なくともそれをざっと読んで、その機能の概要を理解することも価値があります。 readlineの完全なドキュメントは、 https://tiswww.cwru.edu/php/chet/readline/rltop.htmlおよびhttps://tiswww.cwru.edu/php/chet/readline/readline.htmlにあります。