Bagaimana Anda mengingat argumen terakhir (n-th?) Dari perintah sebelumnya yang Anda gunakan dengan bash?

9

Seringkali saya mengeluarkan perintah berbeda pada file yang sama. Sebagai contoh:

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

Apakah ada cara untuk menggunakan kembali argumen dari perintah sebelumnya di saat ini sehingga saya tidak perlu menulis ulang?

badp
sumber

Jawaban:

15

alt-.memang bagus, tetapi jika Anda sudah tahu argumen nomor yang Anda inginkan, Anda bisa lebih cepat: !:nadalah nargumen ke-5 dari perintah sebelumnya.

Ini sering membantu untuk menggabungkan ini dengan ruang ajaib. Untuk mengaktifkannya, masukkan .inputrc Anda Space: magic-space. Dengan itu diaktifkan, ketika Anda mengetik spasi setelahnya !:2, itu akan segera diperluas ke nilainya alih-alih menunggu Anda untuk menekan enter. Menghemat Anda dari tidak sengaja mengambil argumen yang salah.

Cascabel
sumber
9

Dalam bash Anda dapat menggunakan cara pintas Alt+ ..
Memukulnya sekali, akan memberi Anda argumen terakhir. Memukul lebih banyak akan menggilir argumen terakhir Anda.

Kristen
sumber
4

Dalam bash, penunjuk untuk "kata terakhir pada baris perintah sebelumnya" adalah !!$:

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

Anda juga dapat menggunakan "sintaks caret" untuk mengganti bagian awal dari baris perintah; ini berguna jika Anda ingin menjalankan beberapa perintah pada file yang sama:

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

Ada banyak kemungkinan lainnya; lihat "Penggantian riwayat" di halaman manual bash (1) untuk detailnya.

Riccardo Murri
sumber
Sintaks caret itu sebenarnya lebih lambat daripada menekan panah ke atas dan mengedit sendiri baris perintah ...
badp
1
!!$dapat ditulis !$juga.
Mikel
3

Di bash, Anda juga bisa menggunakan $ _ untuk argumen baris perintah terakhir dari perintah terakhir yang Anda ketikkan:

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

menjadi:

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

Salah satu cara yang relatif lambat adalah mengingat perintah sebelumnya dengan dan mengganti perintah sebelumnya dengan yang lebih baru.

badp
sumber
Saya berharap sesuatu yang lebih cepat :)
badp