【问题标题】:Bash get return value of a command and exit with this valueBash 获取命令的返回值并以该值退出
【发布时间】:2018-11-19 11:58:56
【问题描述】:

我想执行一个命令然后得到这个命令的返回值。 完成后,我想退出并退出上一个命令的返回值,即我刚刚执行的命令。我已经有了这段代码,但它似乎不起作用。

exec gosu user /var/www/bin/phpunit -c app
typeset ret_code
ret_code=$?
if [ $ret_code == 0 ]; then
    exit 0
fi

exit 1

我该怎么做?谢谢

【问题讨论】:

  • 为什么不在return $?return $ret_code 紧跟在exec... 之后?还是我错过了什么?
  • 如果您到达exec 之后的代码,$?始终为非零值。 exec 仅在失败时返回。

标签: bash


【解决方案1】:

我认为你的问题是typeset 本身创建的返回值是 0。试试

gosu user /var/www/bin/phpunit -c app
ret_code=$?
return $ret_code

【讨论】:

  • 这里可以去掉typeset命令;它没有做任何有用的事情。
【解决方案2】:

首先,exec 仅在失败时返回,因此您永远不会看到零退出状态。

exec gosu user /var/www/bin/phpunit -c app
ret_code=$?
printf 'Error in execing gosu, %d\n' $ret_code
exit $ret_code

注意这个错误与gosu无关;如果exec 返回,那是因为shell 甚至无法启动 gosu,而不是因为gosu 本身因错误而退出。

也许您不是有意使用exec,只是想运行命令并等待它完成?

gosu user /var/www/bin/phpunit -c app
ret_code=$?
if [ $ret_code = 0 ]; then exit 0; fi
printf 'Error in execing gosu, %d\n' $ret_code
exit $ret_code

【讨论】:

    【解决方案3】:

    知道它已经有一段时间了,但这里有更多的一个班轮。

    这样的……

    if [ $(gosu user /var/www/bin/phpunit -c app;echo $?) ]; then
        exit 0
    fi
    
    exit 1
    

    甚至更短...

    return $(gosu user /var/www/bin/phpunit -c app;echo $?)
    

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      相关资源
      最近更新 更多