Сценарии Android и Linux

which — это скрипт csh, который зависит от .cshrcи поэтому может быть неправильным для других оболочек.

Не используйте which, а используйте type.

4
12.01.2021, 00:48
2 ответа

Android по умолчанию запускает оболочку MirBSD Korn mksh, которая в основном представляет собой расширенный набор sh. Это имеет некоторые ограничения по сравнению со сценариями bash, например, нельзя использовать массивы.

Кроме того, основные утилиты представляют собой набор инструментов для Android или toybox апплеты, использование часто немного отличается и иногда ограничено (, напримерtar)

Настраиваемые устройства Android используют busybox в качестве расширения для отсутствующих базовых утилит, апплеты которых также зависят от сборки.

Разрешения Android расширены с SELinux , который требует другого способа написания сценариев, когда дело доходит до манипулирования файлами, например, нельзя просто использовать sed, как обычно, потому что файл потеряет свой второй контекст.

всегда следует тестировать сценарии на как можно большем количестве оболочек (mksh, ash )и поддерживать простоту использования основных утилит (например, код должен работать с BSD grep, toybox grep и busybox grep)

Избегайте интерактивных скриптов, так как на устройстве нет настоящей клавиатуры, а крошечный сенсорный экран создает проблемы, когда дело доходит до подтверждения командной строки.

Работа с путями также немного отличается на устройствах Android.например, shebang - это #!/system/bin/sh, а каталог /data/local/tmpсохраняется в пользовательском пространстве (, а не в ОЗУ)


Стоит упомянуть adb shell по умолчанию он имеет больше привилегий, чем любой другой эмулятор терминала . сценарии, запускаемые на хосте с помощью команд adb, должны быть четко указаны как таковые, неопытные пользователи могут спутать их со сценариями оболочки, работающими на клиенте.


Что касается сценариев, работающих в режиме восстановления, существует один родственный язык сценариев EDIFY и его аналог замена сценария оболочки . оболочка в режиме восстановления(ash)отличается от режима загрузки Android (mksh), и поведение зависит от сборки восстановления. следует связать busybox и все необходимые двоичные файлы, чтобы избежать проблем с отсутствующими апплетами (, напримерawk)


Сам скриптовый язык ничем не отличается и не имеет определенного синтаксиса. Портирование bash-скриптов на андроид абсолютно возможно и не требует специальных знаний. Просто все дело в другом окружении, поэтому скрипты нужно тестировать на целевой платформе

Тем не менее, Happy scripting:)

11
18.03.2021, 22:37

Не существует единой оболочки для Android или Linux, и некоторые значения по умолчанию менялись с течением времени, поэтому у вас могут быть разные оболочки по умолчанию для разных устройств и дистрибутивов Linux/Unix и Android (, например Lineage OS, Debian, AIX. ).

Многие из этих систем включают в себя более одной оболочки, а это означает, что вы можете запускать сценарии с ash, bash, ksh,... путем изменения шебанга или входа в них с помощью чего-то вроде adb shell -t bash -i, так что, в конце концов, сравнение между разными оболочками.

Вот почему было бы очень сложно перечислить различия в синтаксисе или другие проблемы, основанные на Androidили Linux.

4
18.03.2021, 22:37

Теги

Похожие вопросы