#android #linux #bash #fedora #bash4
#Android #linux #bash #fedora #bash4
Вопрос:
Мой такой же BASH-скрипт работает в Fedora / CentOS.
Но я тестирую один Android eee pad transformer
.
Где у меня есть доступ к терминалу, и я написал небольшой тестовый скрипт. Но он не работает, как я могу это исправить? что я делаю не так?
/data/data/berserker.android.apps.sshdroid/home $ cat test.sh
#!/bin/bash
var=`ifconfig -a`;
echo $var;
/data/data/berserker.android.apps.sshdroid/home $ chmod x test.sh
/data/data/berserker.android.apps.sshdroid/home $ ./test.sh
sh: ./test.sh: not found
/data/data/berserker.android.apps.sshdroid/home $ uname -a
Linux localhost 2.6.36.3-00004-g069b8b5 #1 SMP PREEMPT Wed May 11 22:14:22 CST 2011 armv7l GNU/Linux
/data/data/berserker.android.apps.sshdroid/home $ bash ./test.sh
sh: bash: Permission denied
/data/data/berserker.android.apps.sshdroid/home $ ls -l /bin/bash
ls: /bin/bash: No such file or directory
/data/data/berserker.android.apps.sshdroid/home $ find / -name "bash"
find: /config: Permission denied
lots more.......
find: /proc/595/task/598/fd: Permission denied
......
find: /data: Permission denied
find: /root: Permission denied
Продолжение:
Теперь это мой скрипт, который работает:
#!/bin/sh
echo "hello wassup, run me simply as './test.sh'";
or
#!/bin/bash
echo "hello wassup, run me using 'sh ./test.sh'";
Комментарии:
1. @Ocaso Protal: смотрите выше, все это прозрачно вставлено.
2. Я далеко не эксперт по andriod, но это может быть проблемой с отпечатком в памяти и использованием крошечной оболочки для экономии места на флэш-памяти в ОЗУ. Что
ls -l /bin/bash
показывает? Это символическая ссылка? Если да, то каково назначение символической ссылки? Я думаю, что /bin / bash — это символическая ссылка на оболочку, которая не способна быть полностью совместимой с bash.3. вы пробовали простой скрипт ‘sh’? Вместо /bin/ bash используйте /bin / sh — и посмотрите, что получится. Возможно, что в Android просто нет надлежащей реализации bash.
4. chmod не принимает x в некоторых дистрибутивах Android. Попробуйте chmod 777.
Ответ №1:
в Android оболочка расположена в /system/bin/sh
не /bin/sh
таком виде, как в большинстве Unix-подобных систем. Так что, даже если вы измените #!/bin/bash
на #!/bin/sh
, это все равно не сработает. вам придется использовать #!/system/bin/sh
Android не является дистрибутивом GNU / Linux, поэтому вы не можете ожидать, что все скрипты, которые выполняются на GNU / Linux, также будут работать на Android.
Комментарии:
1. Эта информация неверна. Я просто изменил скрипт на #!/bin / sh, и он работает.
2. на данный момент я использую его с #!/bin/ sh, и он работает. Но если сделать $ sh ./test.sh как упоминал @Asten, это тоже работает.
3. Я пытался,
#!/bin/sh
но моя первая командаsu
не сработала. Изменен на#!/system/bin/sh
и viola, я получил запрос на авторизацию root!
Ответ №2:
Может быть, это сработает при вызове интерпретатора с помощью скрипта?
$ bash ./test.sh
Я увидел, что, хотя это указано, #!/bin/bash
ошибка была опубликована sh
— может быть, это неправильно.
UPD
$ sh ./test.sh
Комментарии:
1. кажется, что интерпретатора bash нет, и по умолчанию используется sh. Попробуйте, пожалуйста, использовать его: $ sh./test.sh . Кроме того, интерпретатор оболочки, в котором вы работаете, может не иметь такой функциональности, как в bash.
2. Но я хочу использовать BASH. Похоже на то, что я использую в Fedora / Centos.
3. Попробуйте найти его, например, с помощью $ which bash
4. спасибо, я временно использую ваш способ $ sh./test.sh или я также могу изменить строку выше на /bin / sh таким образом, по крайней мере, работает. Но его очень беспокоит, каким должен быть Android.
Ответ №3:
На большинстве устройств Android не установлен интерпретатор bash. Если вам действительно нужно запустить скрипт в Linux и Android, вы можете попробовать использовать BusyBox, но для этого потребуется рутировать ваше устройство (и, возможно, аннулировать вашу гарантию). Но даже тогда я не знаю, включена ли ifconfig
утилита в BusyBox.
Я бы настоятельно рекомендовал использовать Android SDK для написания приложения, которое будет выполнять все, что вы пытаетесь выполнить.
Комментарии:
1. Вы имеете в виду, использовать Android SDK в моей Fedora / CentOS? на удаленный Android.
2. Нет, я имею в виду использовать bash-скрипт на Fedora / CentOS, чтобы делать все, что вы делаете. Используйте Java C C с Android SDK, чтобы воспроизвести эту функциональность на Android.
Ответ №4:
Как было указано, ОС Android (до версии 4.0 включительно) не включает интерпретатор BASH (только оболочку). Хотя BusyBox — отличный инструмент, я считаю, что это всего лишь один исполняемый файл, который сочетает в себе урезанные по функциональности версии распространенных утилит UNIX, но фактически не включает интерпретатор BASH.
Скомпилированную версию интерпретатора BASH для Android смотрите в этой теме форума:http://forum.xda-developers.com/showthread.php?t=537827
Ответ №5:
Вы можете установить Busybox, который предоставляет вам множество утилит, таких как awk, file и т.д. … И эмулятор терминала.
- Создайте файл оболочки с
#!/system/bin/sh
в качестве первой строки (shebang) - Теперь поместите завершенный скрипт под
/system/xbin
или/system/bin
и запустите его из эмулятора терминала
Информация представляет собой выдержку из этой статьи: КАК ЗАПУСКАТЬ СЦЕНАРИИ ОБОЛОЧКИ НА УСТРОЙСТВАХ ANDROID
Ответ №6:
Запуск bash-скрипта — это наименьшая из задач. Проблема в том, как это сделать, не открывая какой-нибудь эмулятор терминала и не вводя путь к скрипту. Единственный способ — использовать TCL / TK:
1-) Загрузите и установите AndroWish наhttps://www.androwish.org/home/home
2-) Установите Busybox из магазина Google
Написать лаунчер:
launcher.tcl
#!/usr/bin/wish
exec sh /storage/sdcard0/yourscript.sh
exit 0
yourscript.sh
#!/system/bin/sh
[...]
Добавьте ярлык на рабочем столе в терминал AndroWish, набрав:
borg shortcut add "MyScript" file://mnt/sdcard/launcher.tcl
Комментарии:
1. Кажется, что требуется много усилий для установки TCL / TK только для запуска сценария оболочки.
2. В основном это зависит от того, как часто вам нужно запускать один и тот же скрипт в день, если это можно сделать вручную, пусть будет так. Но AndroWish — это APK.