Bagaimana saya bisa mengingat argumen dari perintah bash sebelumnya?


Jawaban:


562

Anda bisa menggunakan $_atau!$ untuk mengingat argumen terakhir dari perintah sebelumnya.

Juga Alt + .dapat digunakan untuk mengingat argumen terakhir dari salah satu perintah sebelumnya.


121
Juga, jika Anda menginginkan argumen yang sewenang-wenang, Anda dapat menggunakan !!:1,, !!:2dll. ( !!:0Adalah perintah sebelumnya sendiri.) Lihat gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen

41
Mirip dengan !$, Anda gunakan !^untuk argumen pertama.
Will

13
ahh ... * nix ... kau cantik sekali ... setiap hari aku lebih mencintaimu
jx12345

Bagaimana kita bisa merujuk argumen kedua ke terakhir dari perintah sebelumnya? misalnya, Jika saya memberi echo tiger rabbit, bagaimana saya bisa merujuk tigerpada perintah berikut?
Chan Kim

3
Alt + .tidak bekerja dalam mode vi. Hanya FYI, untuk orang lain yang bingung di sini.
Brian McCutchon

160

Jika perintah sebelumnya memiliki dua argumen, seperti ini

ls a.txt b.txt

dan Anda ingin yang pertama, Anda bisa mengetik

!:1

memberi

a.txt

Atau jika Anda menginginkan keduanya, Anda bisa mengetik

!:1-2

memberi

a.txt b.txt

Anda dapat memperluas ini ke sejumlah argumen, misalnya:

!:10-12

@RNA, saya baru saja mencoba lagi untuk memastikan saya tidak memasukkan kesalahan ketik, dapatkah Anda memberikan sedikit lebih detail (mis. Baris perintah ubuntu, cygwin untuk windows? Pesan kesalahan? Baris sebelumnya?)
Robert Gowland

Saya menggunakan GNU bash, versi 3.2.51 (1) -release (x86_64-apple-darwin13) Hak Cipta (C) 2007 Free Software Foundation, Inc. Pesan kesalahannya adalah-bash: :1-2: bad word specifier
RNA

2
Saya mendapatkan hal yang sama jika tidak ada dua argumen di baris sebelumnya. Misalnya. baris 1 ls a.txtbaris 2ll !:1-2
Robert Gowland

kamu benar. Itu adalah kesalahan bodoh yang saya buat. Terima kasih!
RNA

Juga untuk mendapatkan semua argumen, !:^-$dapat digunakan atau tentu saja kode yang mirip dalam kombinasi dengan angka.
816-8055

88

!!:n dimana n posisi 0 berdasarkan argumen yang Anda inginkan.

Sebagai contoh:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

Itu ! prefix digunakan untuk perintah sebelumnya akses.

Perintah lain yang bermanfaat:

  • !$ - argumen terakhir dari perintah sebelumnya
  • !^ - Argumen pertama (setelah program / built-in / script) dari perintah sebelumnya
  • !! - perintah sebelumnya (sering diucapkan "bang bang")
  • !n- nomor perintah ndarihistory
  • !pattern - pencocokan perintah terbaru pattern
  • !!:s/find/replace- perintah terakhir, gantikan finddenganreplace

Info selengkapnya tentang riwayat perintah


7
Alih-alih !!:s/find/replace, Anda juga bisa ^find^replace.
Big McLargeHuge

Juga: !* - semua argumen dari perintah sebelumnya (setelah skrip program / built-in /). misalnya: ls *.tmp *.cache rm !*
Aphoid

68

Di baris perintah Anda dapat menekan esc- .atau alt+.

Itu siklus melalui argumen terakhir dari perintah Anda sebelumnya.


Saya selalu menemukan dan kunci untuk bekerja juga.
Bucket

@Bucket keys pergi melalui perintah sebelumnya, sedangkan solusi yang disediakan oleh Antonio memungkinkan untuk pergi melalui argumen sebelumnya (argumen terakhir dari setiap perintah sebelumnya saja)
everyonesdesign

30

Jika Anda tahu nomor yang diberikan dalam riwayat untuk perintah tertentu, Anda bisa mengambil argumen apa pun dalam perintah itu menggunakan istilah berikut.

Gunakan berikut untuk mengambil argumen kedua dari perintah ketiga dalam sejarah,

!3:2

Gunakan berikut untuk mengambil argumen ketiga dari perintah terakhir kelima dalam sejarah,

!-5:3

Menggunakan tanda minus, Anda memintanya untuk menelusuri dari perintah terakhir dari sejarah.


19

! * menjalankan perintah baru dengan semua argumen sebelumnya.

ls /tmp
cd !*
#you are now in /tmp

Ini tidak berfungsi untuk saya di OSX - harus digunakan $_sebagai gantinya.
Mike W

16

Ya, Anda bisa menggunakan !$untuk mengingat argumen terakhir dari perintah sebelumnya.


Waspadai kata kunci "terakhir," terutama jika perintah Anda berisi beberapa argumen.
Bucket
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.