【发布时间】:2020-05-25 06:43:56
【问题描述】:
PHP 有一个内置的file server 用于测试和开发目的。
在网络浏览器中打开页面后,服务器的控制台输出如下所示:
$ php -S localhost:8000
PHP 7.2.8 Development Server started at Sun Feb 9 23:09:17 2020
Listening on http://localhost:8000
Document root is /_PATHTOFILE_
Press Ctrl-C to quit.
[Sun Feb 9 23:09:19 2020] ::1:57697 [200]: /
[Sun Feb 9 23:09:19 2020] ::1:57698 [404]: /doesnt-exist.js - No such file or directory
我只对警告和错误感兴趣,如何过滤掉所有包含 [200] 的行?
我尝试了以下方法失败:
$ php -S localhost:8000 | grep --line-buffered --invert-match "200" | awk '{print $3}'$ php -S localhost:8000 | awk '!/200/{print $3}'
这两个命令都不过滤行,它们只是记录以下内容:
[Sun Feb 9 23:09:19 2020] ::1:57697 [200]: /
[Sun Feb 9 23:09:19 2020] ::1:57698 [404]: /doesnt-exist.js - No such file or directory
我在这里错过了什么?
【问题讨论】:
-
你试过了吗:
grep -v "\[200\]";我不知道php是否将所有消息a 发送到stdout 或stdout 和stderr 的混合;如果是后者:php -S localhost:8000 2>&1 | grep -v "\[200\]"... ? -
鉴于您的
php调用的示例输出,您希望看到什么输出?您的awk示例只是打印出匹配行的第三个字段...这是您真正想要显示的内容(只是第三个字段)? -
@markp,谢谢!在做了更多 research 之后,我想我需要在 PHP 服务器仍在运行时使用
stdbuf或unbuffer来处理 php 输出。
标签: php bash server terminal console