如何获取用su调用的脚本的返回值

时间:2016-11-28 13:40:25

标签: android bash shell exit-code su

我想使用超级用户权限调用脚本stuff.sh,然后获取其退出代码。但是,执行su -c ./stuff.sh; echo $?之类的操作始终会打印0.我认为这是因为$?中包含的返回值是su返回值,而不是stuff.sh

如何检索我的脚本stuff.sh的正确值?

修改1 当我执行su -c './stuff.sh; echo $?'时,echo会返回stuff.sh退出代码的正确值,但我无法将其删除su su -c './stuff.sh; eval echo $? $code'执行类似echo $code的操作:su只要我离开su -c stuff.sh命令就会返回0。

编辑2 我应该提到上下文和我的发行版,因为这确实不是Ubuntu上的问题。 call.sh从另一个脚本PageSerializer调用,该脚本本身由Android应用程序执行。

3 个答案:

答案 0 :(得分:2)

根据手册页

su normally returns the exit status of the command it executed.  If the command was killed by a signal, su returns the number of the
   signal plus 128.

   Exit status generated by su itself:

             1      Generic error before executing the requested command

             126    The requested command could not be executed

             127    The requested command could was not found

如果这是一个选项,请使用ssh获取返回代码

ssh -l username localhost "command" 
echo $?

答案 1 :(得分:0)

奇怪。运行su:

后,可以找到退出代码
$ su -c true ; echo $? 
0
$ su -c false ; echo $?                                
1

答案 2 :(得分:0)

添加一些引号可以获得stuff.sh的实际退出代码。正确的语法是:

su -c './stuff.sh; echo $?'