获取adb shell命令的结果代码

4

我应该如何获得adb shell <command>$??

我想要检查adb shell mkdir /xxx命令的结果。

我使用adb shell执行了mkdir命令,但失败了,但$?的结果是0

$ adb shell mkdir /xxx
mkdir failed for /xxx, Read-only file system
$ adb shell echo $?
0

$ adb shell "mkdir /xxx; echo $?"
mkdir failed for /xxx, Read-only file system
0

我希望获取 adb shell <command> 的结果代码,但不是交互模式,如下所示:
$ adb shell
shell@android:/ $ mkdir /xxx
mkdir failed for /xxx, Read-only file system
255|shell@android:/ $ echo $?
255
2个回答

7

您应该做:

$ adb shell 'mkdir /xxx; echo $?'
mkdir failed for /xxx, Read-only file system
255

请注意单引号,否则$?在到达adb之前会被评估。

是的,你只是在遇到 shell 展开规则的问题。查看 展开手册页 - mateor
尝试后,我发现 adb shell 'mkdir /xxx; echo $?' 可以工作,但是 adb shell "mkdir /xxx; echo $?" 不行,很奇怪。 - user3875388
一点也不奇怪,尝试 $ echo adb shell "mkdir /xxx; echo $?" adb shell mkdir /xxx; echo 0(检查 0);双引号允许在调用 adb 之前扩展 $? - Diego Torres Milano

1
如果你在使用较老的模拟器,则adb shell不会返回退出值。那么你必须像https://dev59.com/jXTYa4cB1Zd3GeqPqxtK#17480194中所述使用adb shell 'false; echo $?'。

在更新的模拟器中,它可以正常工作,然后你可以使用adb shell false || echo failed。以下是我的测试方法:

$ adb -e android-22 shell false; echo $?
0
$ adb -e android-22 shell 'false; echo $?'
1
$ adb -e android-29 shell false; echo $?
1
$ adb -e android-29 shell 'false; echo $?'
1

2023年,从adb shell原生获取命令的退出状态仍然是不可能的吗? - undefined

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