2013-06-28 62 views
0

你知道爲什麼這個循環返回目錄列表結果?問題雖然循環Apache狀態

#!/bin/bash 
/usr/sbin/httpd fullstatus | while read line 
do 
echo $line 
done 

71-0 - 0/0/410 . 7.74 47987 0 0.0 0.00 0.76 127.0.0.1 
OPTIONS = bin boot dev error_log etc home lib lib64 lost+found media mnt nohup.out opt proc root sbin selinux srv sys test tmp usr var HTTP/1.0 
72-0 - 0/0/103 . 0.14 48912 0 0.0 0.00 0.13 127.0.0.1 
OPTIONS = bin boot dev error_log etc home lib lib64 lost+found media mnt nohup.out opt proc root sbin selinux srv sys test tmp usr var HTTP/1.0 

它應該只返回apache狀態。

71-0 - 0/0/410 . 7.74 48231 0 0.0 0.00 0.76 127.0.0.1 
OPTIONS * HTTP/1.0 
72-0 - 0/0/103 . 0.14 49157 0 0.0 0.00 0.13 127.0.0.1 
OPTIONS * HTTP/1.0 

感謝

回答

2

由於上輸出該行

OPTIONS * HTTP/1.0 

殼膨脹 「*」 中使用的「 echo「參數作爲當前目錄中的文件列表。此腳本的輸出將根據調用shell的$ CWD而有所不同。

轉到任何選定的目錄,然後輸入「echo *」命令。

1

因爲*得到解釋。

記住:

時常引用的變量

在這種情況下:

echo "$line" 
0

Piotr已經回答了這個問題。只是一些補充。我會建議不要管任何東西到while!它會創建另一個浪費資源的進程,如果您在while循環中定義了一個變量並且您想在循環外部使用它,則會面臨問題。我可能會建議使用其他解決方案,例如:

#!/bin/bash 
while read line; do 
echo "$line" 
done < <(/usr/sbin/httpd fullstatus)