在 Ubuntu 机器上:
$ php -v
PHP 5.5.10-1~dotdeb.1 (cli) (built: Mar 6 2014 18:55:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with uopz v2.0.4, Copyright (c) 2014, by Joe Watkins <krakjoe@php.net>
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
我的 test.php 文件很简单:
<?php
exit(1);
我希望这个命令 php test.php || echo "error"
以显示“错误”,但它以状态代码 0 退出。
$ php test.php
$ echo $?
0
但在同一台机器上,相同的代码,但不在文件中,可以按预期工作:
$ php -r "exit(1);" || echo "error"
error
或
$ php -r "exit(1);"
$ echo $?
1
在装有 php 的不同机器 (archlinux) 上:
PHP 5.5.13 (cli) (built: May 29 2014 05:46:58)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
所有情况都按预期工作,即使代码从文件运行时状态代码为 1。
这是一个真正的问题,因为 git hooks 依赖于这个状态代码,而 Jenkins 和我无法用谷歌搜索出来。
它会不会与配置有关?我检查了 cli php.ini 并没有发现任何可疑的东西。
最佳答案
uopz
扩展是问题所在。它“破坏”了退出代码。有一个 bug打开这个问题。
您可以尝试按照错误评论中的建议设置配置 uopz.overloads=0
。不幸的是,那对我不起作用。只有禁用扩展才能解决问题。
关于php - 文件中的 exit(1) 导致脚本状态代码 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24404900/