从 shell 脚本中获取 PHP 脚本的退出状态

12

我有一个Bash shell脚本,像这样调用几个PHP脚本。

#!/bin/bash

php -f somescript.php

php -f anotherscript.php

我希望基于这些脚本的结果撰写一个错误日志和/或活动报告。

有没有办法在shell脚本中获取php脚本的退出状态?

我可以使用整数退出状态或字符串消息。

4个回答

15

您可以使用反引号操作符轻松捕获输出,并通过使用$?获取上一个命令的退出代码:

#!/bin/bash
output=`php -f somescript.php`
exitcode=$?

anotheroutput=`php -f anotherscript.php`
anotherexitcode=$?

6

Emilio的回答很好,但我认为我可以为其他人扩展一下。如果你喜欢,你可以在cron中使用这样的脚本,并在出现错误时通过电子邮件通知您.. YAY :D

#!/bin/sh

EMAIL="myemail@foo.com"
PATH=/sbin:/usr/sbin:/usr/bin:/usr/local/bin:/bin
export PATH

output=`php-cgi -f /www/Web/myscript.php myUrlParam=1`
#echo $output

if [ "$output" = "0" ]; then
   echo "Success :D"
fi
if [ "$output" = "1" ]; then
   echo "Failure D:"
   mailx -s "Script failed" $EMAIL <<!EOF
     This is an automated message. The script failed.

     Output was:
       $output
!EOF
fi

使用php-cgi命令(而不是php)更容易将URL参数传递到php脚本中,可以使用通常的php代码访问这些参数,如下所示:

$id = $_GET["myUrlParam"];


4
$output参数是exec命令的一个参数,可以用来获取另一个PHP程序的输出内容:

callee.php

<?php
echo "my return string\n";
echo "another return value\n";
exit(20);

caller.php

<?php
exec("php callee.php", $output, $return_var);
print_r(array($output, $return_var));

运行caller.php将输出以下内容:
Array
(
    [0] => Array
        (
            [0] => my return string
            [1] => another return value
        )

    [1] => 20
)

请注意,exit状态必须是0-254范围内的数字。更多关于返回状态码的信息,请参见exit

啊,谢谢,但是有没有办法在从bash脚本调用php脚本时获取输出呢?这就是我想问的。我想我可以重写bash脚本,使用你所描述的功能,这很有用。 - Buttle Butkus

0

这比Emilio提供的答案更容易:

只需执行脚本即可

$ php -f script.php

并输出退出代码

$ echo $?

看起来很不错。但是如果 PHP 脚本说 'echo 0',那么 'echo $?' 就会打印出 00。如果是 1,则为 10。 - Buttle Butkus
是的,在 PHP 中,这就是将输出回显到控制台的工作方式。一个人无法阻止这种情况发生。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接