shell 通过ADB以root用户身份启动脚本

ibps3vxo  于 2023-03-19  发布在  Shell
关注(0)|答案(7)|浏览(287)

我已经创建了一个脚本来挂载分区,并在我的Android系统中做一些事情。我将脚本保存为install.sh在Android的/bin文件夹中。
我想从ADB调用脚本,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"

对于我的脚本中所有需要根访问权限的命令,但我遇到了同样的问题。当我运行脚本时,我只获得了一个根 shell ,什么都没有执行。
如果我手动使用第一种解决方案(例如,我调用adb shell su,然后调用我的脚本),它是有效的,但是关键是要自动化这个过程,这样adb shell就可以从另一个脚本调用。
你知道我该怎么做吗?
谢谢!

qlzsbp2j

qlzsbp2j1#

这对我很有效:
创建myscript.bat并将其放入其中(注意要在超级用户模式下执行的命令两边的单引号):

adb shell "su -c 'command1; command2; command3'"

然后从DOS shell运行myscript.bat。
注意:DOS行继续符(^)在这种情况下似乎不起作用。换句话说,以下内容对我不起作用:

adb shell "su -c '^
command1; ^
command2; ^
command3'"

这将导致“语法错误:未终止的引用字符串”

gojuced7

gojuced72#

这是可行的:

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

如果你有更好的方法(即使是没有-csu版本),我很感兴趣。

ekqde3dh

ekqde3dh3#

这对我很有效:

adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
k3bvogb1

k3bvogb14#

我不确定我是否提供了一个解决方案或要求一个更好的解决方案。我想在批处理模式下运行一些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
voj3qocg

voj3qocg5#

但是它不起作用,因为它给了我一个shell访问权限(具有root权限),但是没有执行任何操作。
你怎么知道你被授予了root权限?我假设你正试图在一个设备上执行脚本?你的设备被root了吗?
您可能需要通过chmod向该文件给予执行权限。

chmod ugo=rwx /bin/script.sh
s1ag04yj

s1ag04yj6#

看起来我使用的是一个非常简单的su版本,它不接受-c参数。我复制了另一个su,它确实起作用了。AndyD是完全正确的,所以我接受他的答案而不是我的:)

ndh0cuux

ndh0cuux7#

Android API 32模拟器的工作解决方案:

adb shell "su root 'command'"

由于某种原因,所有其他方法都不起作用(或返回错误)。

相关问题