Jawaban:
Cara paling sederhana adalah menjalankan:
sudo !!
Ini akan menjalankan perintah terakhir tetapi sebagai pengguna super.
Sumber .
!!
sendiri menjalankan perintah Anda sebelumnya sesuai disimpan history
. Selain itu, melakukan !-1
,, !-2
dan seterusnya menjalankan perintah terakhir Anda, perintah terakhir kedua, dan seterusnya. Berguna!
!<command>
akan mengeksekusi acara terakhir dari ~/.bash_history
yang dimulai dengan<command>
!
yang disalin ini tcsh
telah mengacaukan saya lebih banyak daripada yang pernah berguna. Kutipan ganda tidak melindungi dari interpretasi !
. $ foo "!bar"
-> !bar: event not found
.
jawaban : Anda sudo !!
langsung masuk setelah itu untuk mengulangi perintah sebelumnya dengan hak yang ditingkatkan.
sunting: Gambar ditemukan melalui reddit , dan itu adalah parodi dari komik xkcd asli oleh Randall Munroe.
Anda dapat mencoba tombol panah atas untuk menelusuri perintah lama Anda dan menulis ulang / mengubahnya dan menambahkan sudo
di depannya. (tombol beranda di atas tombol panah akan mengatur posisi ke awal.)
Saya tidak suka sudo !!
ide itu, karena kadang-kadang Anda menambahkan perintah lain di antara dan tidak ingat lagi.
sudo !!
, shell akan membesar !!
sehingga Anda dapat melihat perintah apa yang coba dijalankan. Jadi, itu mungkin menjengkelkan untuk menekan Ctrl-C dan menemukan perintah yang tepat, tetapi setidaknya tidak akan membawa Anda tidak sadar.
!!
sudo !!<TAB>
dan autocomplet !!
untuk saya. Bash dapat memperluas riwayat dengan M-^
(bagi saya, alt + shift + 6), tapi itu kurang lancar (Anda bisa mengubahnya lagi). Ada juga shopt -s histverify
, yang membuatnya sehingga ketika Anda menggunakan ekspansi histori dan tekan enter, itu malah memberi Anda baris prompt lain dengan ekspansi dilakukan untuk membiarkan Anda melihat / mengeditnya.
shopt -s histverify
tidak akan membantu sedikit pun. Kebanyakan orang akan terbiasa memukul Enter
dua kali. Pada saat itu mereka masih terlambat untuk memeriksa apa yang terjadi.
Saya hanya akan menambahkan alternatif: sesingkat mengetik sudo !!
dan lebih fleksibel:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
Ini persis dengan jumlah penekanan tombol yang sama (saya menghitung "ctrl + A" sebagai satu ...), tetapi menambahkan "panah atas" Anda dapat melakukannya pada perintah mana pun yang ada dalam riwayat Anda.
set -o vi
). Kemudian Anda dapat Escape (masuk ke mode perintah), dan kemudian 'I' (huruf kapital 'i', masukkan di awal baris).
Ada beberapa cara untuk melakukan ini
Cukup masukkan kembali perintah sudo
sebelum menambahkan perintah
Tekan Up arrowuntuk mendapatkan perintah terakhir dan letakkan sudo
di depannya.
Memasukkan sudo !!
The !!
mengembang untuk yang terakhir memasuki perintah. Anda dapat melakukan hal serupa dengan hal lain dengan sejarah baris perintah lihat di sini
Pertanyaan ini dapat digeneralisasi menjadi " Jalankan perintah yang sama tetapi dengan beberapa modifikasi ", karena salah satu keputusan desain yang brilian di Unix, adalah bahwa apa yang diimplementasikan sekali dalam shell, dapat dimanfaatkan oleh setiap perintah yang dipanggil dari shell.
Dengan kata lain, trik ini tidak hanya berlaku untuk sudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)Ekspansi histori (juga dikenal sebagai subtitusi histori) hanyalah fitur shell untuk membuat pengulangan perintah sebelumnya lebih mudah (dengan sedikit penekanan tombol). Periksa halaman manual shell Anda history expansion
. Ini menjelaskan banyak trik dan jalan pintas yang dapat Anda lakukan dengan histori misalnya:
Anda dapat merujuk ke perintah sebelumnya dengan nomor:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Anda dapat merujuk kata-kata individual dalam perintah sebelumnya:
some-command !$ # run some-command on the last arg of previous command
Anda juga dapat mencari sebelum mengulang:
!?awk # repeat the last command including the string 'awk'
Anda dapat mencari riwayat dan mengganti sesuatu dengan sesuatu yang lain:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
Dan banyak lagi, karena Anda dapat menggabungkan pemilihan perintah, pemilihan arg, pencarian dan penggantian secara mandiri.
Halaman manual shell Anda (dalam hal ini man bash
) adalah teman Anda.
Saya menggunakan zsh bukan bash dan memilikinya di saya ~/.zshrc
, jadi menekan Alt+ Ssisipan sudo
di awal baris perintah:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
Sayangnya, saya tidak dapat melacak cara untuk melakukan hal yang sama di bash.
~/.inputrc
"\es":"\C-asudo "
dan Anda akan pindah ke awal garis panjang dan sudo akan dimasukkan pada awal baris setelah menekan alt-s
. Mulai ulang terminal atau baca ~/.inputrc
kembali agar berfungsi.
Jika Anda ingin melakukannya dalam alias, Anda harus menggunakan alias redo='sudo $(history -p !!)'
untuk beberapa alasan.
Cara saya lebih suka:
Tapi mungkin lebih mudah melakukan "sudo !!", terserah Anda.