Saya menggunakan
history | less
untuk mendapatkan baris-baris perintah sebelumnya dan dari angka-angka di sebelah kiri saya menemukan baris yang saya ingin ulangi (mis. 22) dan melakukan
!22
pada prompt perintah dan itu berhasil - mengeksekusi set perintah pada baris yang saya lakukan pada waktu itu. Saya tidak tahu di mana tanda seru digunakan, apa yang diwakilinya dalam hal tindakan yang diambil oleh bash, dan di mana menggunakannya. Dari dokumentasi saya tidak melihat penjelasan yang 'nyata'.
Jawaban:
!
adalah fitur yang awalnya muncul di shell C , kembali pada hari-hari sebelum Anda dapat mengandalkan terminal untuk memiliki tombol panah. Ini sangat berguna jika Anda menambahkan nomor perintah saat ini ke prompt (PS1="\!$ "
) sehingga Anda dapat dengan cepat melihat layar Anda untuk mendapatkan nomor untuk perintah sebelumnya.Sekarang Anda dapat menggunakan tombol panah dan hal-hal seperti Ctrl-Runtuk mencari sejarah perintah, saya tidak melihat banyak kegunaan untuk fitur ini.
Satu varian dari itu Anda mungkin masih menemukan berguna adalah
!!
, yang menjalankan kembali perintah sebelumnya. Sendiri, saya tidak menemukan yang !!Enterlebih cepat dari sekadar ↑ Enter, tetapi dapat membantu ketika digabungkan menjadi perintah yang lebih besar.Contoh: Kesalahan pilot umum pada
sudo
sistem berbasis adalah untuk melupakansudo
awalan pada perintah yang membutuhkan hak istimewa ekstra. Seorang pemula mengetik ulang seluruh perintah. Siswa yang rajin mengedit perintah dari sejarah perintah shell. Yang tercerahkan adalah tipesudo !!
.Bash memungkinkan Anda menonaktifkan
!
pemrosesan di shell denganset +o histexpand
atauset +H
. Anda dapat menonaktifkannya di Zsh denganset -K
.sumber
sudo
, atau sesuatu), maka Anda dapat melakukannyasudo !!
, misalnya. Itu mungkin sedikit lebih cepat daripada "Atas / Ctrl-A (atau Rumah, jika Anda cukup beruntung) / sudo / space / enter". YMMV. :)echo 'Hi!'
atauecho "Hi!"
atauecho Hi\!
. Semua melakukan hal yang sama.setopt NO_BANG_HIST
di zsh mungkin lebih mudah diingat daripada-K
.Jika tidak ada jawaban yang lebih panjang di sini pasti ada satu di Super User, karena saya sudah membaca satu baru-baru ini. Di halaman bash man, Anda dapat menemukan bagian besar berjudul SEJARAH EKSPANSI tentang masalah ini.
Anda dapat melakukan seluruh host lebih dari sekedar menjalankan perintah terakhir, atau perintah nomor X. Anda dapat melakukan hal-hal seperti
!cat
menjalankan perintah terakhir yang dimulai dengancat
. Atau!?bash?:s/bash/csh/
jalankan perintah terakhir yang berisibash
tetapi ganti dengancsh
.sumber
!!:s/bash/csh/
sebenarnya menjalankan perintah terakhir , lalu mengganti bash dengan csh, jika ada. Bukan perintah terakhir yang menyertakan bash. Itu akan!?bash?:s/bash/csh/
atau mungkin!?bash?:s/%/csh/
man
halaman, fitur ini sangat tidak jelas. Terima kasih telah menunjukkan bagian yang relevan - itulah satu-satunya tempat di dokumen yang sebenarnya di mana mereka menjelaskannya dengan cukup.Banyak lagi yang bisa dilakukan dengan
!
:!-3
!ls
dan masih banyak lagi. Lihat 15 Contoh Ekspansi Sejarah Bash Linux yang Harus Anda Ketahui
sumber
Seorang teman saya mengirimi saya email ini:
sumber
Tentu saja dapat Anda lakukan
!!
untuk menggunakan kembali perintah terakhir di bash shell. Dan kemudian ada!$
untuk menggunakan kembali bagian terakhir dari perintah terakhir Anda.misalnya melihat beberapa file
Jika sekarang Anda ingin mengedit file yang sama, Anda bisa menggunakan
!$
untuk mendapatkan hanya path file dari perintah terakhirsumber
$touch f1 f2
dan kemudian$vim !$
akan mengevaluasi untuk$vim f2