3

我该怎么$?adb shell <command>

我想检查adb shell mkdir /xxx.

我执行mkdir命令 byadb shell并失败,但结果$?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
4

3 回答 3

6

你应该做:

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

注意单引号,否则$?在到达 adb 之前进行评估。

于 2013-07-05T02:16:36.347 回答
1

如果您使用的是较旧的模拟器,adb shell则不返回退出值。然后你必须adb shell 'false; echo $?'https://stackoverflow.com/a/17480194/306864中使用

在较新的模拟器中,它可以正常工作,然后您可以执行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
于 2019-10-18T14:15:59.030 回答
-2

您应该检查adb shell自身的返回值,而不是检查设备上的最后一个返回值。例如,执行adb shell ls然后执行echo $?(从您的 shell,而不是从设备内部,即不执行adb shell echo $?),您将看到返回值 0。如果您执行adb shell dlfkgjdlkf,然后echo $?您将看到返回值 1。

于 2018-09-04T09:10:13.043 回答