2016-03-07 29 views
5

下面是從RHEL /etc/init.d/functions。我想弄清楚,當我遇到這個while循環傳來__pids_var_run()功能做什麼。在bash中,while循環後的左角括號是什麼意思?

  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" 

有人能解釋什麼while : ; do ; ... done < "$pid_file"呢?更具體地講,done後的最後一部分,因爲它的其餘部分或多或少是有道理的。

+0

這意味着它的任何命令後做同樣的事情。 –

回答

4

這意味着,在循環讀取從標準輸入任何東西命令將從指定的文件中讀取(而不是鍵盤,例如)。

特別是在這種情況下,循環使用read line從標準輸入讀取一行,因此當您從$pidfile重定向時,它有效地逐行讀取文件。

爲了進一步瞭解重定向,這裏是它建議this Bash Guide通過LhunathGreyCatIllustrated redirection tutorial

+3

意味着從文件中獲取stdin。它與鍵盤完全沒有關係。標準輸入通常與鍵盤相關聯,但將兩者混淆是錯誤的。 –

+0

當然,我不知道在什麼水平來解釋它。 – alfC

+0

從技術上講,它指定了'while'複合命令本身的標準輸入,從中體內的任何命令都繼承自己的標準輸入。 – chepner

3

我看到這個quesiton已經回答了(我無法評論,因爲我做了獎金),但我想你應該看看這個網站,當你得到一個機會:

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

這傢伙(或加侖)真的潛入適當和不恰當的語法與例子。

相關問題