Cari tahu perintah apa yang terakhir saya jalankan yang dimulai dengan cara tertentu?

9

Di lingkungan bash commandline, Anda dapat melakukannya !!untuk menjalankan kembali perintah terakhir Anda. Dan Anda dapat menekan panah ke atas untuk melihat perintah terakhir yang Anda jalankan. Tetapi bagaimana jika Anda hanya ingin melihat tetapi tidak menjalankan perintah terakhir yang Anda jalankan yang dimulai dengan cara tertentu?

bernie2436
sumber
1
Bisakah Anda memodifikasi pertanyaan Anda? Saya masih tidak jelas apa yang Anda minta.

Jawaban:

19

Jika Anda mencari riwayat melalui Ctrl+ rdan mengetik beberapa huruf dari perintah dan tidak menekan Entertetapi menekan , perintah akan muncul dan tidak akan berjalan. Alternatif lain adalah:

history | grep 'mycommand'

Cheatsheet riwayat yang bagus ini mungkin juga membantu.

mkc
sumber
1
Dan jika Anda tidak mencari pasangan pertama dan ingin terus mencari mundur, tekan ctrl-r lagi dan lagi. Dan ini hanya satu dari banyak perintah hebat yang disediakan oleh bash history & readline library.
orion
Mengingat Anda memiliki jawaban terverifikasi, saya akan menarik milik saya dan jika Anda ingin menggunakan "^.\{7\}pattern"ungkapan dalam jawaban Anda, Anda boleh melakukannya!
jika Anda ingin mengedit beberapa perintah dan jalankan kembali, Anda juga dapat menggunakanfc ### ###
Kiwy
10

Anda dapat menampilkan perintah terakhir, dengan menambahkan :pke !!:

$ echo 123
123
$ !!:p
echo 123

Jika Anda ingin menampilkan perintah terakhir dijalankan dengan nama tertentu, gunakan satu tanda seru:

$ echo 123
123
$ pwd
/home/cuonglm
$ !echo:p
echo 123
cuonglm
sumber
4

Setiap jawaban di sini, sejauh yang saya tahu, adalah non-portabel. Untuk opsi portabel, pertimbangkan jaminan POSIX fc:

    $ man fc

-E Editor Gunakan editor bernama oleh Editor untuk mengedit perintah. Editor string adalah nama utilitas, tunduk mencari melalui PATH variabel ... Nilai dalam FCEDIT variabel harus digunakan sebagai default ketika -e tidak ditentukan. Jika FCEDIT adalah nol atau tidak disetel, ed harus digunakan sebagai editor.

−l (Huruf ell.) Daftar perintah daripada meminta editor pada mereka. Perintah harus ditulis dalam urutan yang ditunjukkan oleh operan pertama dan terakhir, sebagaimana dipengaruhi oleh −r , dengan setiap perintah didahului dengan nomor perintah.

−n Menekan nomor perintah saat mendaftar dengan −l .

Reverser Membalik urutan perintah yang tercantum (dengan −l ) atau diedit (dengan −l maupun −s ) .

Menjalankan kembali perintah tanpa memohon editor.

Operan

pertama , terakhir Pilih perintah untuk daftar atau edit. Jumlah perintah sebelumnya yang dapat diakses harus ditentukan oleh nilaivariabel HISTSIZE . Nilai pertama atau terakhir atau keduanya akan menjadi salah satu dari berikut ini:

[+ atau-] nomor A angka positif (atau negatif ) yang mewakili nomor perintah; nomor perintah dapat ditampilkan denganopsi −l ... Misalnya, −1 adalah perintah sebelumnya yang segera ...

Ketika opsi −l digunakan untuk membuat daftar perintah, format setiap perintah dalam daftar adalah sebagai berikut:

    "%d\t%s\n", <line number>, <command>

Jika kedua opsi −l dan −n ditentukan, format setiap perintah adalah:

    "\t%s\n", <command>

Jika terdiri dari lebih dari satu baris, baris setelah yang pertama akan ditampilkan sebagai:

    "\t%s\n", <continued-command>

Tetapi pastikan untuk menggunakan -l atau -e jika Anda HANYA ingin melihat / mengedit perintah Anda. Secara default fcakan membuka daftar perintah yang diminta dalam FCEDIT (catatan yang berbeda dari variabel lingkungan EDITOR Anda ) dan, ketika FCEDIT berhenti, fcakan menjalankan perintah yang diedit.

Bagaimanapun, secara khusus jawaban untuk pertanyaan ini dapat:

    % fc -l -1

Atau tanpa nomor baris:

    % fc -ln -1

Atau lima perintah terakhir dalam urutan terbalik:

    % fc -lrn -1 -5

Di pager Anda:

    % fc -lrn -1 -5 |$PAGER

Untuk panggilan terakhir Anda ke fc:

    % fc -l fc
mikeserv
sumber
+1 untuk upaya. Namun, pertanyaannya ditandai bash
grebneke
Ini bekerja bash, dan yang lainnya. Penggunaan bashtidak menghalangi portabilitas, tetapi tentu mengembangkan kebiasaan buruk akan.
mikeserv
Jawaban terbaik di sini dan harus yang diterima, karena mudah dibawa.
wildeyes
3

tekan Ctrlrlalu mulai ketikkan perintah yang ingin Anda lihat. bash secara bertahap akan selesai. Ketika Anda puas, tekan Enteruntuk menjalankannya kembali atau Ctrlgmembatalkan.

glenn jackman
sumber
2

Jika Anda hanya ingin menggunakan perintah terakhir:

 history | cut -c 8- | tail -n 2 | head -n 1 

Jika Anda ingin dapat melakukannya berulang kali, beri spasi sebelum historyatau gunakan:

 history | cut -c 8- | grep -Ev '^history' | tail -n 1

Jika Anda hanya ingin melihat perintah terakhir dimulai dengan pola xyz:

 history | cut -c 8- | grep -E '^xyz'  | tail -n 1 

Tetapi ini tidak berfungsi jika polanya adalah karakter awal 'sejarah' dan Anda perlu sesuatu seperti:

history | cut -c 8- | grep -Ev 'history \|' | grep -E '^hist'  | tail -n 1 
Anthon
sumber
Ada kesalahan ketik dalam penggunaan pertama Anda pada cut.
jon
1
bind '"\ep": history-search-backward'
bind '"\en": history-search-forward'

Dan kemudian Anda dapat memasukkan beberapa teks, dan kemudian Alt-puntuk mencari perintah terakhir yang memulai yang sama (dan Alt-p, Alt-nuntuk siklus bolak-balik melalui mereka).

(Itu adalah kunci default yang mengikat widget serupa di zsh)

Stéphane Chazelas
sumber
0

Tambahkan baris ini dalam file ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Kemudian source ~/.inputrcdi shell Anda (atau cukup restart shell).

Sekarang Anda dapat mengetik beberapa huruf dari perintah, dan kemudian menggunakan panah atas / bawah untuk menelusuri perintah yang dimulai dengan beberapa huruf itu.

wim
sumber