通过 ADB 以 root 身份启动脚本
Posted
技术标签:
【中文标题】通过 ADB 以 root 身份启动脚本【英文标题】:Launch a script as root through ADB 【发布时间】:2012-02-04 10:16:07 【问题描述】:我创建了一个脚本来挂载分区并在我的 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 访问权限的所有命令,但我有同样的问题。 当我运行脚本时,我只获得了一个 root shell,没有执行任何操作。
如果我手动使用第一个解决方案(例如,我调用 adb shell su,然后调用我的脚本),它就可以工作。然而,重点是自动化该过程,以便可以从另一个脚本调用 adb shell。
您知道我如何实现这一目标吗?
谢谢!
【问题讨论】:
我找到了我的解决方案here。 【参考方案1】:这对我有用:
创建 myscript.bat 并放入其中(注意要在超级用户模式下执行的命令周围的单引号):
adb shell "su -c 'command1; command2; command3'"
然后从 DOS shell 运行 myscript.bat。
注意:在这种情况下,DOS 行继续符 (^) 似乎不起作用。换句话说,以下内容对我不起作用:
adb shell "su -c '^
command1; ^
command2; ^
command3'"
这会导致“语法错误:未终止的带引号的字符串”
【讨论】:
这在我的三星 Note 4 Exynos 版本,系统版本 Android 4.4 上运行得非常好。我在网上搜索了一整天的解决方案。感谢上帝,我终于读到了这篇文章。有用。 RootAdb 以前可以在 Galaxy Note 10.1 平板电脑上工作,但现在不能在 Note4 上工作了。 在 Android 7.1.1 上,我发现在双引号中使用单引号实际上会弄乱执行。删除它们似乎使一切按预期工作。【参考方案2】:这行得通:
adb shell echo command which needs root privileges \| su
如果需要重定向:
adb shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su
用于将本地文件“复制”到需要 root 权限的 android 路径(但本地文件不得包含'
):
cat alocalfile | adb shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su
如果您有更好的方法(即使对于没有-c
的su
版本),我很感兴趣。
【讨论】:
当我像这样adb shell 'echo uname -a > /ggg.txt' \| su
运行带有输出重定向的命令时,我收到文件系统是只读的错误消息,但是当我通过adb shell su
以root 身份登录时,我可以成功运行相同的命令。这个问题有解决办法吗?【参考方案3】:
这对我有用:
adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
【讨论】:
这个命令有什么新的地方还没有提到吗? 设备命令周围没有单引号。在我删除它们之后,一切都开始工作了。谢谢。【参考方案4】:我不确定我是否提供了解决方案或要求提供更好的解决方案。 我想以批处理模式运行一些 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
【讨论】:
【参考方案5】:但它不起作用,因为它为我提供了 shell 访问权限(具有 root 权限),但没有执行任何操作。
你怎么知道你被授予root权限?我假设您正在尝试在设备上执行脚本?你的设备已经root了吗?
您可能需要通过 chmod 授予文件执行权限。
chmod ugo=rwx /bin/script.sh
【讨论】:
没有执行任何操作,但控制台显示一个外壳,我可以输入我的命令,带有“#”,这意味着我有 root 访问权限。是的,我的设备已植根。我的脚本也有执行权限,但是调用 sh /bin/script.sh 应该不需要这个权限吧? 啊,我什至没有意识到这一点,但是您不需要具有执行权限是正确的。您可以尝试“source /bin/script.sh”,看看是否有任何不同(可能不是)。【参考方案6】:看来我使用的是一个非常简单的 su 版本,它不接受 -c 参数。 我复制了另一个确实有效的 su 。不过,AndyD 是完全正确的,所以我接受他的回答而不是我的 :)
【讨论】:
我的也不行。你从哪里复制的?以上是关于通过 ADB 以 root 身份启动脚本的主要内容,如果未能解决你的问题,请参考以下文章
写了一个bat脚本,用来启动windows服务,系统是windows7.每次运行这个脚本都要右击选择以管理员身份运行。
我的php想用root权限调用shell脚本,怎么让apache拥有root权限,该http.conf为root,apache启动不了