Путь для bash в Android termux

Обычные пути для bash не работают в приложении termux. Я пробовал: /usr/bin/bash и /bin/bash Также команда «whereis» дает следующий вывод: $ whereis bash bash: /data/data/com.termux/files/usr/bin/bash Но этот путь также не верно. Итак, я должен запускать каждый сценарий bash со словом «bash» перед ним. И не может запускать bash-скрипты без него.

/data/data/com.termux/files/usr/bin/bashединственный правильный путь.
Чего вы пытаетесь достичь?
Как и в обычном Linux, я хочу передать: /bin/bash или /usr/bin/bash для запуска скриптов. Но не писать «bash» перед каждым именем скрипта.
Как и @DanHulme, я не понимаю, в чем проблема. С #!/data/data/com.termux/files/usr/bin/bashпервой строкой скрипта можно выполнить скрипт, просто нажав /path/to/the/script.sh.
$ ls myscript.sh $ cat my* #!/data/data/com.termux/files/usr/bin/bash read -p ' введите, что выводить ' inputs echo "вы ввели $inputs" $ myscript.sh myscript .sh: команда не найдена
Команда не найдена...

Ответы (3)

Если myscript.shего нет в вашем файле $PATH, вам нужно запустить его по пути, а не по базовому имени. Предполагая, что вы находитесь в том же каталоге, что и скрипт, запустите

./myscript.sh

Обратите внимание на ведущую./

Эй ♦, я был бы признателен, если бы вы оставили мне шанс... Это третий раз, когда публикуется один и тот же ответ.
@iBug Вы, безусловно, заслуживаете похвалы за то, что вникли в проблему. Я посмотрел, и комментарий Йозефа показал, в чем была его ошибка. Я собирался прокомментировать ваш ответ, чтобы предложить это, но понял, что действительно пишу ответ.
Ах си. Я вижу разницу сейчас.

В сентябре 2017 года сопровождающий Termux выпустил пакет termux-exec, который завершается execve(2)так, что файлы, имеющие строку shebang, например #!/bin/shили #!/usr/bin/env, будут правильно работать в Termux. Просто беги

pkg install termux-exec

и перезапустите Termux (или откройте новый сеанс). Теперь вы сможете запускать #!/bin/shсценарии.

Предыдущее решение было следующим:

Termux предоставляет удобную утилиту

termux-fix-shebang

Чье описание гласит:

Перепишите шебанги в указанные файлы для запуска под Termux, что делается путем перезаписи #!*/bin/binaryв #!$PREFIX/bin/binary.

Просто примените его к сценариям, которые вы хотите запустить. Он делает то, что предполагает его название: исправляет строку shebang #!/xxxв ваших файлах скриптов. Он также может исправлять другие скрипты, такие как Perl или Python.

Также обратите внимание, что по умолчанию ваш рабочий каталог не находится в$PATH , поэтому вы не можете напрямую ввести myscript.sh, а вместо этого

./myscript.sh
^~

... или явно указать оболочку интерпретатора (в этом случае вам не нужен префикс каталога):

bash myscript.sh
^~~~
Все еще. $myscript.sh myscript.sh: команда не найдена
@JosefKlimuk Не могли бы вы напечатать ./myscript.sh?
На него уже ответил Дэн Халм 1 ноября.
Похоже, что termux-fix-shebangэто устарело, так как termux-execэто лучшее решение? Если да, проголосуйте за ответ @sd-rausty.
@CarlWalsh Я знаю об этом и уже проголосовал.

Установить termux-exec. Это новая утилита, которая должна решить вашу проблему с $PATH. Termux-exec позволяет выполнять сценарии с помощью shebangs для традиционных файловых структур Unix. См. https://wiki.termux.com/wiki/Termux-exec для получения дополнительной информации.