通过ADB以root身份启动脚本

我已经创建了一个脚本来安装分区并在我的Android系统中执行一些操作。 我将脚本保存为Android的/ bin文件夹中的install.sh。

我想从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。

你知道我怎么能做到这一点吗?

谢谢 !

  • adb pull - >找不到设备
  • 从php使用shell脚本生成android apk?
  • 通过adb shell服务调用isms Android 4.1.2发送短信
  • Android:Adb拒绝连接到客户端
  • 获取通过adb连接的设备的android操作系统版本
  • 如何使用ADB命令检测正在运行的应用程序
  • 通过ADB以root身份启动脚本
  • 通过ADB Shell或Terminal获取应用程序名称/标签
  • 这对我有用:

    创建myscript.bat并放入其中(注意要在超级用户模式下执行的命令的单引号):

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

    然后从DOS shell运行myscript.bat。

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

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

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

    这有效:

     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 

    如果你有更好的方法(即使对于没有-c su版本),我感兴趣。

    这对我有用:

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

    但它不起作用,因为它给我一个shell访问权限(具有root权限),但没有执行任何操作。

    你怎么知道你获得了root权限? 我假设您正在尝试在设备上执行脚本? 您的设备是否已植根?

    您可能需要通过chmod将执行权限授予该文件。

     chmod ugo=rwx /bin/script.sh 

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