Jalankan perintah dengan argumen dari perintah terakhir

34

Saat menjalankan perintah, kadang-kadang mungkin Anda perlu menjalankan perintah dengan argumen dari perintah terakhir. Bagaimana Anda bisa melakukan ini?

Tentu saja, kecuali penggunaan tombol panah dan Deltombol: ... DelDelDel... Del<new_command>.

Radu Rădeanu
sumber

Jawaban:

45

Misalnya, jika Anda menjalankan perintah ini:

mkdir long_path_here/new_dir

kemungkinan besar Anda ingin masuk ke direktori yang baru dibuat. Anda dapat melakukan ini menggunakan "pintasan" berikutnya:

  • cd Esc.- ketik cddan setelah tekan Escdiikuti oleh .(tidak dalam waktu yang bersamaan). Jika perintah sebelumnya tidak memiliki argumen, Anda akan mendapatkan perintah sebelumnya itu sendiri.
  • cd !*- dalam hal ini Anda akan mendapatkan semua argumen dari perintah previuos. Jika perintah sebelumnya tidak memiliki argumen, Anda tidak akan mendapatkan apa-apa.
  • cd Alt+ .- ketikkan cddan setelah tekan Altdan .(dalam waktu yang bersamaan). Bahkan, menggunakan cara ini dan terus menekan .(tanpa melepaskan Alt), Anda akan mendapatkan argumen terakhir untuk setiap perintah dari sejarah. Jika suatu perintah tidak memiliki argumen, Anda akan mendapatkan perintah itu sendiri.

Secara umum: <command> Esc.atau <command> !*atau <command> Alt+ ..

Radu Rădeanu
sumber
wow, Anda menyelamatkan saya ratusan jam saya akhirnya akan
sia
32

Ada beberapa cara pintas jika Anda ingin semua argumen dari perintah sebelumnya, atau hanya argumen terakhir.

  • Untuk semua argumen: <command> !*
  • Untuk argumen terakhir: <command> !$

Contoh:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

Jika Anda ingin satu argumen dari daftar argumen dari perintah sebelumnya, Anda bisa menggunakan <command> !!:<argNumber>

Contoh:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/
RandomMooCow
sumber
2
Anda hanya memerlukan satu !di versi arg tunggal, mis !:2. , . Dengan asumsi bash default.
belacqua
3
Anda juga dapat menggunakannya !^sebagai pengganti !:1.
Paddy Landau
7

Disebutkan !*dan !$merupakan hal yang baik, tetapi ketika Anda perlu melakukan sedikit mengedit pintasan readline datang untuk membantu!

Misalnya, alih-alih yang tak terhitung jumlahnya ... DelDelDel... DelAnda bisa menekan Ctrl-a(lompat ke awal baris) Alt+d(hapus sampai akhir kata)

Untuk info lebih lanjut man readlinedan cari Default key bindings.

defhlt
sumber
4

Untuk mengambil nargumen th dari perintah sebelumnya, ketik Alt+ n+ Alt_. Misalnya, setelah:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

mengetik echodiikuti dengan Alt2Alt_akan memberi Anda ini di prompt berikutnya:

$ echo 2

"Tangkapan layar" setelah Anda mencapai Alt2adalah:

(arg: 2) echo

Anda dapat mengulangi Alt_beberapa kali untuk mendapatkan nargumen ke-5 dari perintah sebelumnya secara berurutan.

Gagasan lain yang bermanfaat adalah mendefinisikan alias r="fc -s". Kemudian, Anda bisa melakukan pergantian perintah:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
Alok
sumber