1

我有一个 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 或包装在输出缓冲区语句中,我都不会看到这个不需要的输出。

我已经阅读了 PHP 中 exec() 调用的抑制输出,但无法解决问题。

4

1 回答 1

2

dos2unix 将其消息打印到标准错误。要重定向它们,您需要使用 2> 而不是 >。

$dos2unix = exec("dos2unix ".$filePath." 2> /dev/null");

另一种选择是使用选项 -q。使用 -q dos2unix 将不会打印消息,并且在出现问题时不会返回错误代码。

$dos2unix = exec("dos2unix -q ".$filePath.");
于 2017-03-15T19:08:08.063 回答