bashで使用した前のコマンドの最後(n番目)に渡された引数をどのように呼び戻しますか?


9

多くの場合、同じファイルに対して異なるコマンドを発行します。例えば:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

以前のコマンドの引数を現在の引数で再利用して、書き換える必要がないようにする方法はありますか?

回答:


15

alt-.確かにいいですが、必要な番号付き引数がすでにわかっている場合!:nは、より速くすることができますn。前のコマンドのth番目の引数です。

これを魔法の空間と組み合わせると役立つことがよくあります。これを有効にするには、.inputrcに入れますSpace: magic-space。これが有効になっていると、の後!:2にスペースを入力すると、Enterキーを押すのを待つのではなく、すぐにその値に展開されます。誤った引数を誤って取得するのを防ぎます。


9

bashでは、ショートカットAlt+を使用できます.
一度叩くと、最後の議論になります。それ以上打つと、最後の議論が繰り返されます。


4

bashでは、「前のコマンドラインの最後の単語」の指定子は!!$次のとおりです。

$ echo hello world
hello world
$ echo goodbye !!$
echo goodbye world # this is bash echoing actual cmd line before execution
goodbye world

「キャレット構文」を使用して、コマンドラインの最初の部分を置き換えることもできます。これは、同じファイルで複数のコマンドを実行する場合に便利です。

file file.dat
^file^ls -l^ #gives `ls -l file.dat`
^ls -l^stat # gives `stat file.dat`

さらに多くの可能性があります。詳細については、bash(1)のマニュアルページの「履歴の置換」を参照してください。


そのキャレット構文は、実際には上矢印を押してコマンドラインを自分で編集するよりも遅くなります...
badp

1
!!$書くこと!$もできます。
ミケル

3

bashでは、最後に入力したコマンドの最後のコマンドライン引数に$ _を使用することもできます。

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

になる:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_

0

比較的遅い方法の1つは、前のコマンドを呼び出して、前のコマンドを新しいコマンドで置き換えることです。


私はもっ​​と速いものを期待しています:)
badp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.