You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中区分处理PHP脚本的STDOUT与STDERR输出

区分PHP脚本STDOUT和STDERR的Shell处理方法

在Shell中,我们可以利用文件描述符重定向来分别处理PHP脚本的标准输出(STDOUT,文件描述符1)和标准错误(STDERR,文件描述符2),实现分别写入不同文件的需求。

基础实现:分别写入文件

直接用重定向语法,把STDOUT写入CSV文件,STDERR写入错误日志:

php foo.php > output.csv 2> error.log
  • > 是 1> 的简写,代表将文件描述符1(STDOUT)的内容写入output.csv,如果文件已存在会覆盖原有内容。
  • 2> 代表将文件描述符2(STDERR)的内容写入error.log,同样会覆盖原有内容。

追加模式(避免覆盖文件)

如果需要每次运行脚本时,把输出追加到已有文件末尾而不是覆盖,改用>>和2>>:

php foo.php >> output.csv 2>> error.log

同时在终端查看输出并写入文件

如果想在终端实时看到输出,同时把内容写入对应文件,可以用bash的进程替换结合tee命令:

php foo.php > >(tee output.csv) 2> >(tee error.log >&2)
  • >(tee output.csv) 会把STDOUT的内容传给tee,tee会同时输出到终端和写入output.csv。
  • 2> >(tee error.log >&2) 则处理STDERR,>&2是把tee的输出再转回STDERR,这样终端上错误信息会保持原本的错误流显示(比如部分终端会用特殊颜色标记错误输出)。

验证效果

运行脚本后,当PHP中$a=1时,normal condition会出现在output.csv里;当$a为其他值时,error condition会出现在error.log里。

内容的提问来源于stack exchange,提问作者nhuff717

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:09:58