Ответ 1
Может быть, он будет работать при вызове интерпретатора с script?
$ bash ./test.sh
Я видел, что, хотя указано #!/bin/bash
, ошибка была отправлена sh
- может быть, она ошибается.
UPD
$ sh ./test.sh
В Fedora/CentOS работает тот же самый BASH script.
Но я тестирую один Android eee pad transformer
.
Где у меня есть доступ к терминалу, и я написал небольшой тест script. Но его не работает, как я могу это исправить? что я делаю неправильно?
/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
Последующие действия:
Теперь это мой script, который работает:
#!/bin/sh
echo "hello wassup, run me simply as './test.sh'";
or
#!/bin/bash
echo "hello wassup, run me using 'sh ./test.sh'";
Может быть, он будет работать при вызове интерпретатора с script?
$ bash ./test.sh
Я видел, что, хотя указано #!/bin/bash
, ошибка была отправлена sh
- может быть, она ошибается.
UPD
$ sh ./test.sh
в Android оболочка находится в /system/bin/sh
not /bin/sh
, как в большинстве Unix-подобных систем. Поэтому, даже если вы измените #!/bin/bash
на #!/bin/sh
, он все равно не будет работать. вам нужно будет использовать #!/system/bin/sh
Android не является дистрибутивом GNU/Linux, поэтому вы не можете ожидать, что все скрипты, которые работают на GNU/Linux, также будут работать на Android.
Большинство устройств Android не имеют установленного интерпретатора bash. Если вам действительно нужно запустить script через Linux и Android, вы можете попробовать использовать BusyBox, но для этого потребуется укоренение вашего устройства (и потенциально опорочивая вашу гарантию). Но даже тогда я не знаю, включена ли утилита ifconfig
в BusyBox.
Я настоятельно рекомендую использовать Android SDK для написания приложения, чтобы сделать все, что вы пытаетесь выполнить.
Как уже было сказано, ОС Android (вплоть до 4.0 включительно) не включает в себя интерпретатор BASH (только оболочка). В то время как BusyBox - отличный инструмент, я считаю, что это всего лишь один исполняемый файл, который объединяет выпущенные унифицированные унифицированные утилиты UNIX, но на самом деле не включает в себя интерпретатор BASH.
Для скомпилированной версии интерпретатора BASH для Android см. этот раздел форума: http://forum.xda-developers.com/showthread.php?t=537827
Вы можете установить Busybox, который предоставляет вам множество утилит, таких как awk, file и т.д., и Терминальный эмулятор.
#!/system/bin/sh
в качестве первой строки (shebang)/system/xbin
или /system/bin
и запустите его из эмулятора терминалаИнформация является выдержкой из этой статьи: КАК ПРОВЕРИТЬ СКРИПТЫ SHELL НА ANDROID DEVICES
Я использую Termux. Я попробовал BusyBox, но поскольку я парень Ubuntu, для меня это было слишком много, как MinGW. Поскольку мой телефон не укоренен, я доволен этим. Но я хотел бы использовать несколько своих сценариев Ubuntu BASH, и теперь я понимаю, что вам нужно изменить способ вызова сценария интерпретатором bash/sh. Будет ли то же самое для Termux в его текущей версии (0.2-stable), как и для BusyBox?