2016-03-07 19 views
5

Aşağıdaki, RHEL'deki /etc/init.d/functions adresinden alınmıştır. Döngüde karşılaştığımda __pids_var_run() işlevinin ne yaptığını anlamaya çalışıyorum.Bir süre döngüden sonra sol açılı ayraç, bash'da ne anlama geliyor?

  while : ; do 
        read line 
        [ -z "$line" ] && break 
        for p in $line ; do 
          if [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] ; then 
            if [ -n "$binary" ] ; then 
              local b=$(readlink /proc/$p/exe | sed -e 's/\s*(deleted)$//') 
              [ "$b" != "$binary" ] && continue 
            fi 
            pid="$pid $p" 
          fi 
        done 
      done < "$pid_file" 

birisi while : ; do ; ... done < "$pid_file" ne yaptığını açıklayabilir misiniz ? Daha spesifik olarak, done'dan sonraki son bölüm, geri kalanı az çok anlamlıdır.

+0

Bu, herhangi bir komuttan sonra yaptığı ile aynı şey anlamına gelir. –

cevap

4

Bu, döngüdeki herhangi bir komutun stdin'den okuyan herhangi bir komutun verilen dosyadan (örneğin, klavye yerine) okunacağı anlamına gelir.

Özellikle bu durumda, döngü, stdin'den tek bir satırı okumak için read line kullanır; bu nedenle, $pidfile'dan yönlendirdiğinizde, dosya satırını etkin bir şekilde okur.

ayrıca burada Lhunath ve GreyCat tarafından this Bash Guide tarafından tavsiye edilen bir Illustrated redirection tutorial var, yönlendirmeler hakkında okumak.

+3

Dosyadan stdin almak için. Klavye ile hiçbir ilgisi yok. Genellikle, stdin bir klavye ile ilişkilidir, ancak ikisini birleştirmek bir hatadır. –

+0

Elbette, bunu hangi düzeyde açıklayacağımı bilmiyordum. – alfC

+0

Teknik olarak, vücuttaki herhangi bir komutun kendi standart girdisini miras aldığı 'while' bileşik komutunun standart girdisini belirtir. – chepner

3

Bu quesiton zaten (Bir ödül yaptım çünkü yorum yapamam) cevap görüyoruz, ama bir şans ne zaman bu siteyi kontrol gerektiğini düşünüyorum: (

http://mywiki.wooledge.org/BashFAQ/001

Bu adam veya gal) örneklerle doğru ve uygunsuz sözdizimine gerçekten girer.