Misalkan saya ingin menjalankan urutan empat perintah yang telah saya jalankan sebelumnya. Jika yang pertama adalah 432 dalam sejarah perintah, maka saya bisa melakukan:
$ !432; !433; !434; !435
Saya ingin tahu, apakah ada cara yang lebih efisien untuk mencapai ini?
bash
command-line
command-history
Eric Wilson
sumber
sumber
history -p \!43{2..5}
untuk mencetak perintah 432 hingga 435 ke terminal, cocok untuk salin / tempel berikutnya.Jawaban:
Jika mengacu pada perintah yang baru saja dijalankan, cara yang lebih efisien adalah merujuknya dengan angka negatif:
Juga, setelah Anda melakukannya, entri riwayat terakhir Anda akan berisi seluruh rantai perintah, sehingga Anda dapat mengulanginya
!!
.Sunting: Jika Anda belum melakukannya, kenallah dengan fungsi bawaan yang hebat
fc
, yang disebutkan oleh Gilles . (Gunakanhelp fc
.) Ternyata Anda juga dapat menggunakan angka negatif, sehingga Anda dapat melakukan hal yang sama seperti menggunakan di atasIni memiliki satu peringatan, meskipun: setelah ini,
eval
baris disimpan dalam sejarah sebagai perintah terakhir. Jadi jika Anda menjalankan ini lagi, Anda akan jatuh ke lingkaran!Cara yang lebih aman untuk melakukan ini adalah dengan menggunakan
fc
mode operasi default : meneruskan kisaran perintah yang dipilih ke editor dan menjalankannya setelah Anda keluar dari sana. Mencoba:Anda bahkan dapat membalik urutan kisaran perintah:
fc -1 -4
sumber
Untuk melihat rentang perintah dalam riwayat, gunakan
fc
perintah bawaan:Untuk mengeksekusi mereka lagi:
sumber
man fc
tidak memberi saya apa-apa. Apa artinyafc
? Opsi apa lagi yang ada?help fc
... dan jugahelp help
.... help: help [-dms] [pattern ...] Tampilkan informasi tentang perintah builtin.-l
bendera, itu akan dieksekusi tanpa perlu kejahataneval
.fc
singkatan dari "menemukan perintah" atau "perintah memperbaiki".Ada cara yang bagus dan alternatif untuk menjalankan sejumlah perintah secara berurutan dari sejarah Bash:
alih-alih menggunakan pengganti sejarah (
!432
atau!-4
), Anda dapat mencari di seluruh sejarah dengan Ctrl+ r, dan setelah Anda menemukan perintah pertama yang ingin Anda gunakan jalankan, tekan Ctrl+ o( operasikan-dan-dapatkan-berikutnya ) alih-alih returntombolini akan meluncurkan perintah dan mengusulkan yang berikutnya dari sejarah. Anda dapat menekan Ctrl+owaktu sebanyak yang Anda inginkan, dan mengakhiri urutan baik dengan returnyang terakhir, atau Ctrl+cberhenti tanpa meluncurkannya.
sumber
Ctrl-o
itu hanya menghasilkan literal^o
dan istirahat saya(reverse-i-search)
. Mungkin ada beberapa pengaturan lain yang terlibat.Untuk menjalankan perintah dengan segera daripada mengeditnya, berikut adalah versi Giles yang secara sintaksis lebih tipis menggunakan eval :
Argumen usus besar ke -e adalah bash noop, yang memiliki efek melewatkan langkah "buka di editor" yang diinginkan fc. Juga, sekarang histori (baru-baru ini) akan berisi perintah aktual dari histori, bukan pernyataan eval.
sumber
fc
untuk loop danxsel
Ini berfungsi dengan baik ketika saya ingin menggabungkan dan menjalankan kembali perintah n terakhir beberapa kali:
Kemudian:
Atau untuk perintah yang lebih besar yang mungkin perlu diedit:
sumber