
Bash でのワークフローを少し改善したいのですが、同じコマンドを別の実行可能ファイルに対して実行したいことがよくあることに気づきました。
いくつかの例:
Git (2 番目の単語をすぐに変更したい):
git diff foo/bar.c
git checkout foo/bar.c
Cat/rm (最初の単語のみ変更する必要があります):
cat foo/is/a/very/long/path/to/bar.c
rm foo/is/a/very/long/path/to/bar.c
最初の単語を削除するにはCtrl+を押す必要があることはわかっていますが、もっと速い方法があるかどうか知りたいです。aDel
答え1
!$
前のコマンドの最後の単語に展開されます。
つまり、次のようにすることができます:
cat foo/is/a/very/long/path/to/bar.c
rm !$
または:
git diff foo/bar.c
git checkout !$
あなたの例では、最後の単語だけが繰り返されたので、!$
うまくいきました。実際に繰り返したい引数がたくさんあり、最初の単語だけを変更したい場合は、 を使用できます。!*
これは、0番目を除く前のコマンドのすべての単語に展開されます。
マニュアルページの「HISTORY EXPANSION」セクションを参照してくださいbash
。そこには多くの柔軟性があります。
答え2
Ctrl+ をa押すと行の先頭に移動し、Alt+ を押すとd最初の単語が削除されます。
答え3
実際に速くなるかどうかは分かりませんが、この記事、特にポイント3:
- ^str1^str2^ を使用して前のコマンドの文字列を置き換えます。
次の例では、最初に ls コマンドを実行してファイルを検証しました。その後、ファイルの内容を表示したいことに気付きました。ファイル名全体を再度入力する代わりに、以下に示すように、前のコマンドの「ls」を「cat」に置き換えるだけです。
$ ls /etc/cron.daily/logrotate $ ^ls^cat^ cat /etc/cron.daily/logrotate
答え4
@jjlin の回答に加えて、次のヒントも興味深いかもしれません:
- Ctrl+w左の単語を削除します
- Ctrl+kカーソルからコマンドラインの末尾までを削除します
- Ctrl+uカーソルからコマンドラインの先頭までを削除します
- Alt+bカーソルを1単語後ろに移動
- Alt+fカーソルを1単語先へ移動
$_
前のコマンドラインの最後の引数を含む
詳細については、bash
マニュアルページの「Readline コマンド名」セクションを参照してください。
例えば:
cat foo/is/a/very/long/path/to/bar.c
rm $_