2013-06-28 60 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)