如何防止作曲家立即将stderr打印到stdout

时间:2015-02-13 21:16:52

标签: php shell composer-php

目标

如果缺少.env,请停止运行编译器安装

composer.json代码段

"scripts": {
    "pre-install-cmd": "[[ -a .env ]] || echo '.env missing. please create .env' 1>&2 && exit 1;"
},

输出

$ composer install
.env missing. please create .env
Script [[ -a .env ]] || >&2 echo '.env missing. please create .env' && exit 1; handling the pre-install-cmd event returned with an error



  [RuntimeException]
  Error Output: .env missing. please create .env

所需

与上述相同但没有粗糙,特别是立即回声的&多余.env missing. please create .env

问题

如何防止作曲家立即回显该字符串?甚至可以使用-q开关

1 个答案:

答案 0 :(得分:0)

我想知道这应该如何运作?

您要求Composer运行您的脚本。该脚本创建输出,显示。

现在该脚本的返回代码表示错误情况。其余的由Composer决定。最好通知用户哪个脚本失败了(这直接解释了回显输出之后的行),因为脚本不必回显任何内容,并且您可以自由地在那里运行多个脚本行。

然后一般的Composer错误显示再次出现,再次声明错误条件产生了一些输出。

现在我想知道你想抑制什么。那第一行?然后不要回应任何事情。

以后的线路?没有运气,这就是Composer一般处理错误的方式。

退一步看大局,我问为什么不应该允许Composer安装依赖项? Composer不需要该文件 - 如果您的代码需要它,它应该为用户提供一种更简单的方法来创建该文件,或检查它是否缺失并以合理的默认值假设作出反应,或者拒绝工作 - 这将使您能够更好地控制显示错误消息的情况。