Как запустить BASH-скрипт на моем Android?

#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 и т.д. … И эмулятор терминала.

  1. Создайте файл оболочки с #!/system/bin/sh в качестве первой строки (shebang)
  2. Теперь поместите завершенный скрипт под /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.