你知道为什么这个循环返回目录列表结果??
#!/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
由于
答案 0 :(得分:2)
因为输出中的这一行
OPTIONS * HTTP/1.0
shell将“echo”参数中使用的“*”扩展为当前目录中的文件列表。此脚本的输出将根据调用shell的$ CWD而有所不同。
转到任何选定的目录,然后输入“echo *”命令。
答案 1 :(得分:1)
因为*
被解释了。
记住:
在这种情况下:
echo "$line"
答案 2 :(得分:0)
while
!它将创建另一个浪费资源的bash进程,如果在while
循环中定义变量并且想要在循环外部使用它,您将面临问题。我可能会建议使用其他解决方案,例如:
#!/bin/bash
while read line; do
echo "$line"
done < <(/usr/sbin/httpd fullstatus)