Saya baru tahu bahwa Linux memiliki sudo !!
perintah yang benar-benar berlaku sudo
untuk perintah yang dimasukkan terakhir. Saya belum pernah mendengarnya.
Apakah itu kontrol bersama? Di mana saya dapat menemukan dokumentasi tentang hal itu?
Saya baru tahu bahwa Linux memiliki sudo !!
perintah yang benar-benar berlaku sudo
untuk perintah yang dimasukkan terakhir. Saya belum pernah mendengarnya.
Apakah itu kontrol bersama? Di mana saya dapat menemukan dokumentasi tentang hal itu?
Jawaban:
Ini hanya pintasan bash. Omong sudo!!
-omong, tidak. Ini sudo !!
(perhatikan ruang).
The !!
di bash pada dasarnya merupakan perluasan dari perintah sebelumnya.
Lihatlah bagian "Perluasan Sejarah" dari halaman bash man:
http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators
Ini sebenarnya sudo !!
, yang terdiri dari perintah sudo
, dengan mana Anda mungkin akrab, dan penanda acara , !!
yang mengacu pada perintah terakhir dimasukkan. Anda dapat menemukan lebih banyak di bash
halaman manual, di bawah Event Designators
bagian.
Event Designators
An event designator is a reference to a command line entry in the his‐
tory list. Unless the reference is absolute, events are relative to
the current position in the history list.
! Start a history substitution, except when followed by a blank,
newline, carriage return, = or ( (when the extglob shell option
is enabled using the shopt builtin).
!n Refer to command line n.
!-n Refer to the current command minus n.
!! Refer to the previous command. This is a synonym for `!-1'.
!string
Refer to the most recent command preceding the current position
in the history list starting with string.
!?string[?]
Refer to the most recent command preceding the current postition
in the history list containing string. The trailing ? may be
omitted if string is followed immediately by a newline.
^string1^string2^
Quick substitution. Repeat the previous command, replacing
string1 with string2. Equivalent to ``!!:s/string1/string2/''
(see Modifiers below).
!# The entire command line typed so far.
Pemisahan fungsi ini adalah salah satu prinsip desain paling indah yang membuat Linux / Unix jauh lebih kuat daripada alternatif lain di mana setiap program adalah pulau independen yang terpisah dari konvensi dan kemampuan.
"membuat setiap program melakukan satu hal, dan melakukannya dengan baik"
Daripada menerapkan !! di dalam sudo (atau perintah lain) yang dapat mengambil manfaat dari mengulangi perintah sebelumnya - itu diimplementasikan sekali (dalam shell) dan semua perintah dapat mengambil manfaat dari itu. Jadi kamu bisa melakukan:
$ echo !! # will echo the last command
$ time !! # will repeat and time the last command
$ strace !! # will repeat the last program while system-call tracing it
dan seterusnya.
Tapi itu tidak berakhir di sini. Shell tidak lebih dari sekedar memperluas sejarah via! perancang acara. Sebelum mengeksekusi perintah Anda, itu melakukan ekspansi variabel, ekspansi wildcard nama-file (globbing), penggantian perintah, pengalihan file / IO, dan banyak lagi. Semua yang dapat dimanfaatkan dan digunakan dalam perintah apa pun yang dipanggil dari shell.
Keuntungan besar lainnya adalah jika Anda menghabiskan waktu mempelajari shell Anda ('man bash' dalam hal ini), Anda perlu mempelajarinya sekali dan Anda dapat menggunakan kemampuan yang kuat ini di mana-mana, setiap saat. Adalah jauh lebih mudah untuk mempelajari satu set prinsip dan konvensi yang kuat, daripada mempelajari kembali bagaimana agr baris perintah ditangani di setiap program atau utilitas.