Linux'un son girilen komut için sudo !!
tam anlamıyla geçerli bir komutu olduğunu öğrendim sudo
. Daha önce hiç duymamıştım.
Bu ortak bir kontrol müdür? Bununla ilgili belgeleri nerede bulabilirim?
Linux'un son girilen komut için sudo !!
tam anlamıyla geçerli bir komutu olduğunu öğrendim sudo
. Daha önce hiç duymamıştım.
Bu ortak bir kontrol müdür? Bununla ilgili belgeleri nerede bulabilirim?
Yanıtlar:
Bu sadece bash kısayolları. Bu sudo!!
arada değil. O var sudo !!
(boşluk dikkat edin).
!!
Bash temelde önceki komuta bir açılımıdır.
Bash man sayfasının "Geçmiş Genişlemesi" bölümüne bir göz atın:
http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators
Aslında bu sudo !!
komutun oluştuğu, sudo
muhtemelen aşina olduğumuz, ve bir olay designator , !!
, girilen son komuta eder ki. Daha fazla bash
bilgiyi Event Designators
bölümün altındaki kılavuz sayfasında bulabilirsiniz .
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.
Bu işlevsellik ayrımı, Linux / Unix'i her bir programın bağımsız bir kongre ve yetenek adası olduğu diğer alternatiflerden çok daha güçlü kılan en güzel tasarım ilkelerinden biridir.
"Her programın bir şey yapmasını sağlayın ve iyi yapın"
Uygulamak yerine !! sudo (veya başka bir komut) içinde, önceki komutun tekrarlanmasından faydalanabilirsiniz - bir kez (kabuklarda) uygulanır ve tüm komutlar bundan yararlanabilir. Böylece şunları yapabilirsiniz:
$ 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
ve bunun gibi.
Ama burada bitmiyor. Kabuk sayesinde tarihi genişletmek çok daha fazlasını yapar! olay belirleyicileri. Komutunuzu çalıştırmadan önce, değişken genişletme, dosya adı joker karakter genişletme (globbing), komut değiştirme, dosya / GÇ yönlendirme ve çok daha fazlasını yapar. Bunların tümü kabuğundan çağrılan herhangi bir komutta kullanılabilir ve kullanılabilir.
Bir başka büyük avantaj, kabuğunuzu öğrenmek için biraz zaman harcarsanız (bu durumda 'man bash') bir kez öğrenmeniz ve bu güçlü yetenekleri her yerde, her zaman kullanabilmenizdir. Komut satırı agrlarının her program veya yardımcı programda nasıl ele alındığını öğrenmek yerine, bir dizi güçlü ilke ve konvansiyonu öğrenmek çok daha kolaydır.