Pilih perintah dari bash history

20

Menekan tombol atas itu membosankan dan saya mungkin kehilangan perintah yang saya cari. Jadi ketika mengetik historydi terminal memberi saya semua perintah yang saya masukkan sebelumnya, diindeks ke nomor. Apakah ada cara saya bisa memanggil nomor yang terkait dengan perintah?

pengguna182936
sumber
ada opsi yang lebih interaktif sekarang? ini sangat rawan kesalahan
matt

Jawaban:

31

Sejarah bash dapat melakukan banyak hal bermanfaat, dan pencarian dengan Strg-ryang disebutkan oleh Terry Wang adalah penting di antara mereka. Tetapi juga mungkin untuk melakukan persis apa yang Anda minta.

Anda dapat melakukan kembali perintah sebelumnya dengan !!. Dengan ini, Anda juga dapat mengedit perintah sebelumnya. Jika misalnya Anda lupa untuk mendapatkan hak akses root untuk perintah

apt-get install a-long-list-of-packages

Anda tidak perlu mengetik ulang semua itu lagi. Alih-alih hanya menelepon

sudo !!

Jika Anda ingin menjalankan kembali perintah pada posisi tertentu dari riwayat Anda, Anda juga dapat menggunakan !, misalnya

!3

untuk menjalankan kembali perintah di posisi 3. Sadarilah bahwa ini diperhitungkan dari atas. Jadi jika Anda menyimpan 500 perintah dalam riwayat Anda, !1akan menjadi "500 perintah yang lalu". Anda juga dapat menggunakan angka negatif. Sebagai contoh

!-2

akan menjalankan kembali perintah terakhir kedua.

Anda juga dapat menjalankan kembali perintah terakhir yang dimulai dengan string seperti

!apt-

yang akan melakukan ulang baris terakhir yang dimulai dengan "apt-". Jika Anda ingin perintah terakhir di mana string muncul di mana saja di baris, Anda dapat menggunakan sesuatu seperti

!?pt-ge

Ada banyak hal menarik yang bisa dilakukan oleh bash history. Hanya untuk memberi kesan berbagai kemungkinan, Anda dapat secara khusus mengakses parameter perintah dari riwayat. Begitu

!-5:3:p

akan mencetak parameter ketiga ke kelima dari perintah terakhir.

EDIT: Mengenai komentar Rudie di bawah ini, dengan pengaturan standar ekspansi bash history ini memang dieksekusi secara langsung. Ini mungkin terbaik digambarkan seperti ini: Sebuah panggilan seperti !-3ini digantikan oleh shell dengan perintah sepertiga terakhir dari riwayat dan kemudian masukan Anda (dengan penggantian) dieksekusi. Jadi jika Anda mengetik !-3dan menekan ENTERdan perintah terakhir ketiga Anda adalah ls ~, itu berlaku sama seperti jika Anda mengetik ls ~lagi dan menekan ENTER"Anda sendiri".

Jika Anda tidak menginginkannya, Anda dapat mengatur opsi shell histverify. Untuk mengatur dan menghapus opsi shell, Anda mungkin ingin membaca shoptperintah. Dengan histverifyset, panggilan seperti !-3hanya menulis penggantian dari histori Anda ke baris perintah Anda, tetapi tidak langsung melakukannya. Anda punya, jadi untuk speek, tekan yang penting ENTERsendiri - atau menahan diri dari itu, jika Anda mau.

Henning Kockerbeck
sumber
Jadi !sangat berbahaya ... Saya ingin tahu apa yang !-4dilakukan sebelum menjalankannya. Atau apakah itu menunjukkan Anda pertama kali? Ringkasan keren!
Rudie
1
@ Rudie Itu poin yang bagus, saya memperbarui jawaban saya. Fitur sejarah sebagian besar dimaksudkan untuk mempercepat pekerjaan Anda dan menghemat penekanan tombol. Jadi standar, "Apakah Anda benar-benar serius?" setidaknya sebagian akan mengalahkan tujuan itu. Dan meskipun Anda bisa, biasanya Anda tidak akan memanggil perintah "jauh" seperti !-238. Seharusnya tidak terlalu sulit untuk mengingat perintah terakhir kedua, ketiga terakhir, mungkin terakhir;) Seperti yang sering terjadi pada Linux (dan, sebenarnya, dengan komputasi secara umum), diharapkan Anda tahu apa yang Anda lakukan. Dan jika Anda benar-benar menginginkan jaring pengaman tambahan, satu shoptlagi;)
Henning Kockerbeck
16

Ya ada. Jika, misalnya, Anda ingin menjalankan perintah yang memiliki nomor 1234 di sebelahnya, lakukan:

!1234

Hal berguna lainnya:

  • Jika Anda ingin menjalankan perintah terakhir yang Anda jalankan, lakukan:

    !!
  • Jika Anda ingin menjalankan lsperintah terakhir yang Anda jalankan, lakukan:

    !ls
  • Jika Anda hanya berlari ls /some/long/path, dan ingin cdmelakukannya, lakukan:

    cd !$

Untuk informasi lebih lanjut:

Alaa Ali
sumber
3

Jika Anda telah menemukan nomor riwayat suatu perintah dan Anda ingin menjalankannya lagi, ketik !diikuti dengan nomor itu, mis. !1234Dan tekan Enter. Ini adalah bagian dari ekspansi sejarah ; Anda bisa memasang pengubah ke dalamnya.

Jika Anda ingin mengedit perintah sebelum menjalankannya, fc 1234panggil editor eksternal.

Tetapi seperti yang telah disebutkan oleh Wang Wang biasanya ada cara yang lebih cepat untuk menemukan perintah dalam sejarah daripada menentukan nomor sejarahnya, termasuk Ctrl+ Runtuk memanggil pencarian tambahan (tekan Enterketika Anda telah menemukan perintah yang ingin Anda jalankan), atau fc PREFIXuntuk mengeksekusi sebelumnya perintah dimulai dengan PREFIX.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1

The historyperintah akan menampilkan semua perintah dan jumlah mereka terkait. Jika Anda ingin melakukan pemeriksaan cepat sebelum mengeksekusi baris perintah # 135 Anda dapat mengetik:

echo !135

Ini akan menunjukkan kepada Anda apa yang akan dieksekusi.

Bruce M
sumber