我已经创建了一个脚本来安装分区并在我的Android系统中执行一些操作。我将脚本以install.sh的形式保存在Android的/ bin文件夹中。
我想从ADB调用脚本,它本身是从Windows上的批处理文件调用的,但它需要以root身份执行。
我尝试的第一个解决方案是使用
调用脚本adb shell "su -c sh /bin/script.sh"
但它不起作用,因为它给我一个shell访问权限(具有root权限),但没有执行任何操作。 我也试着打电话给
adb root "sh /bin/script.sh"
但是我收到了以下错误
adbd cannot run as root in production builds
然后我试着写
su -c "command"
对于我的脚本中需要root访问权限的所有命令,但我遇到了同样的问题。 当我运行脚本时,我只获得了一个根shell,并且没有执行任何操作。
如果我手动使用第一个解决方案(例如我称之为adb shell su,然后是我的脚本),它就可以了。然而,重点是自动化该过程,以便可以从另一个脚本调用adb shell。
你知道我怎么能做到这一点吗?
谢谢!
答案 0 :(得分:56)
这对我有用:
创建myscript.bat并放入其中(注意要在超级用户模式下执行的命令的单引号):
adb shell "su -c 'command1; command2; command3'"
然后从DOS shell运行myscript.bat。
注意:在这种情况下,DOS行继续符(^)似乎不起作用。换句话说,以下内容对我不起作用:
adb shell "su -c '^
command1; ^
command2; ^
command3'"
这会导致“语法错误:未终止的引用字符串”
答案 1 :(得分:3)
这有效:
adb shell echo command which needs root privileges \| su
如果您需要重定向:
adb shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su
将本地文件“复制”到需要root权限的android路径(但alocalfile 不能包含'
):
cat alocalfile | adb shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su
如果您有更好的方式(即使su
版本没有-c
),我感兴趣。
答案 2 :(得分:2)
这对我有用:
adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
答案 3 :(得分:0)
但它不起作用,因为它给我一个shell访问权限(具有root权限),但没有执行任何操作。
您如何知道您获得了root权限?我假设您正在尝试在设备上执行脚本?您的设备是否已植根?
您可能需要通过chmod将执行权限授予该文件。
chmod ugo=rwx /bin/script.sh
答案 4 :(得分:0)
看来我使用的是非常简单的su版本,它不接受-c参数。 我复制了另一个确实起作用的su。 AndyD完全正确,所以我接受他的回答而不是我的回答:)
答案 5 :(得分:0)
我不确定是否提供了解决方案或要求更好的解决方案。 我想以批处理方式运行一些200命令以发送到adb 我遵循了这种方法
adb shell "su -c command ; "
adb shell "su -c command ; "
adb shell "su -c command ; "
adb shell "su -c command ; "
我将它们保存在批处理文件中
此命令
adb shell "su -c 'command1; command2; command3'"
不能超过一定的最大大小。没用
error: service name too long