【问题标题】:Retrieve exit status from php script inside of shell script从 shell 脚本内的 php 脚本中检索退出状态
【发布时间】:2013-09-09 23:13:17
【问题描述】:

我有一个 bash shell 脚本,它可以像这样调用一些 PHP 脚本。

#!/bin/bash

php -f somescript.php

php -f anotherscript.php

我想根据这些脚本的结果编写错误日志和/或活动报告。

有什么方法可以在shell脚本中获取php脚本的退出状态?

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

【问题讨论】:

    标签: php bash shell exit-code


    【解决方案1】:

    这比埃米利奥的答案更容易:

    执行脚本

    $ php -f script.php
    

    并回显退出代码

    $ echo $?
    

    【讨论】:

    • 看起来不错。但是如果 php 脚本说“echo 0”,那么“echo $?”会打印 00。如果是 1,那么就是 10。
    • 是的,这就是在 php 中向控制台回显输出的方式。这是无法阻止的
    【解决方案2】:

    您可以使用 backtick 运算符轻松捕获输出,并使用 $? 获取last command 的退出代码:

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

    【讨论】:

      【解决方案3】:

      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】:

        exec 命令的$output 参数可用于获取另一个 PHP 程序的输出:

        被调用者.php

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

        调用者.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 脚本时,有什么方法可以获取输出?这就是我想问的。我想我可以在 PHP 中重写 bash 脚本以使用您描述的功能,这很有用。
        猜你喜欢
        • 2013-03-01
        • 1970-01-01
        • 2018-07-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        • 2014-09-23
        • 2013-01-05
        相关资源
        最近更新 更多