Запустите script как root через ADB
Я создал script для монтирования разделов и создания некоторых вещей в моей системе Android. Я сохранил script как install.sh в папке /bin Android.
Я хочу вызвать script из ADB, который сам вызывается из пакетного файла в Windows, но его нужно выполнить с правами root.
Первое решение, которое я пробовал, состояло в том, чтобы вызвать script с помощью
adb shell "su -c sh /bin/script.sh"
но он не работает, поскольку он дает мне доступ к оболочке (с правами root), но ничего не выполняется.
Я также попытался позвонить
adb root "sh /bin/script.sh"
но я получил следующую ошибку:
adbd cannot run as root in production builds
Затем я попытался написать
su -c "command"
для всех команд, которым нужен корневой доступ в моем script, но у меня такая же проблема.
Когда я запускаю script, я получаю только корневую оболочку и ничего не выполняется.
Если я использую первое решение вручную (например, я вызываю adb shell su, затем my script), он работает. Однако все дело в том, чтобы автоматизировать процесс, так что оболочку adb можно вызвать из другого script.
Есть ли у вас какое-то представление о том, как я могу это достичь?
Спасибо!
Ответы
Ответ 1
Это работает для меня:
Создайте myscript.bat и поместите в него (обратите внимание на одинарные кавычки вокруг команд, которые будут выполняться в режиме суперпользователя):
adb shell "su -c 'command1; command2; command3'"
затем запустите myscript.bat из оболочки DOS.
Примечание: в этой ситуации не работает символ продолжения строки DOS (^). Другими словами, для меня не работает следующее:
adb shell "su -c '^
command1; ^
command2; ^
command3'"
В результате получается "Синтаксическая ошибка: строка с неиспользуемой кавычкой"
Ответ 2
Это работает:
adb shell echo command which needs root privileges \| su
Если вам нужно перенаправить:
adb shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su
Для "копирования" локального файла на путь android, требующий прав root (но alocalfile не должен содержать '
):
cat alocalfile | adb shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su
Если у вас есть лучший способ (даже для su
версий, которые не имеют -c
), мне интересно.
Ответ 3
Это работает для меня:
adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
Ответ 4
но он не работает, поскольку он дает мне доступ к оболочке (с правами root), но ничего не выполняется.
Как вы знаете, что вам предоставлены права root? Я предполагаю, что вы пытаетесь выполнить script на устройстве? Укомплектовано ли ваше устройство?
Вам может потребоваться предоставить разрешения на выполнение через chmod в файл.
chmod ugo=rwx /bin/script.sh
Ответ 5
Похоже, что я использовал очень простую версию su, которая не принимала аргумент -c.
Я скопировал еще один su, который действительно работал. AndyD полностью прав, поэтому, я принимаю его ответ вместо моего:)