我有一个Jenkins触发的项目,其中包含以下命令包含在PHP exec中 -
$dos2unix = exec("dos2unix ".$filePath);
它在Jenkins控制台输出中显示以下不需要的命令输出,并使屏幕变得混乱 -
dos2unix: converting file /home/jenkins/deployment_beta/phing/scratchpad/adserver/app/webroot/openx/lib/OA/Dal/Delivery/mysql.php to UNIX format ...
dos2unix: converting file /home/jenkins/deployment_beta/phing/scratchpad/adserver/app/webroot/openx/lib/OA/Dal/Maintenance/Statistics/Common.php to UNIX format ...
我尝试在ob_start()和ob_end_clean()中包装命令,并将输出定向到/ dev / null -
ob_start();
$dos2unix = exec("dos2unix ".$filePath." > /dev/null");
ob_end_clean();
但是,我在控制台输出中的表现仍然相同。
注 - 如果我在命令行中手动触发构建,我不会看到这个不需要的输出,无论我是否已将输出定向到/ dev / null或包装在输出缓冲区语句中。
我已阅读Suppressing output from exec() calls in PHP但无法解决问题。
答案 0 :(得分:2)
dos2unix将其消息打印到stderr。要重定向它们,您需要使用2>而不是>。
$dos2unix = exec("dos2unix ".$filePath." 2> /dev/null");
另一个选择是使用选项-q。使用-q dos2unix不会打印消息,并且在出现错误时不会返回错误代码。
$dos2unix = exec("dos2unix -q ".$filePath.");