Termux говорит: «Плохой интерпретатор: нет такого файла или каталога».

У меня проблема, и я надеюсь, что кто-то может мне помочь. В настоящее время я пытаюсь написать скрипт для Termux или Termux:Task. Мой скрипт в настоящее время выглядит так:

#!/data/data/com.termux/files/usr/bin/bash
cd /./sdcard/www/public/
wp post list sleep 5

Каждый раз, когда я загружаю скрипт, я получаю следующее сообщение об ошибке:

/data/data/com.termux/files/usr/bin/wp: /usr/bin/env: bad interpreter: No such file or directory.

Я искал решение своей проблемы в течение нескольких часов, к сожалению, безуспешно.

Я использую расширение для Termux под названием WordPress CLI. Когда я запускаю termux и ввожу команды по отдельности, все работает. Но как только я пишу команды в сценарий sh и запускаю, он больше не работает. :(

Может кто-нибудь помочь мне?

Большое спасибо


person AntiiHeld    schedule 19.08.2019    source источник


Ответы (3)


Это простая ошибка, которую вы можете исправить, заменив !/data/data/com.termux/files/usr/bin/bash. С #!/data/data/com.termux/files/usr/bin/bash Пожалуйста, сообщите, если вы снова получите ошибку

person kcubeterm    schedule 20.10.2019

Попробуйте использовать #!/usr/bin/env bash в строке shebang.

Termux-exec позволяет выполнять сценарии с помощью shebangs для традиционных файловых структур Unix. Таким образом, шебанги, такие как #!/bin/sh и #!/usr/bin/env python, должны работать без termux-fix-shebang.

Из https://wiki.termux.com/wiki/Termux-exec

person S D Rausty    schedule 19.12.2019

Согласно документ:

Почему я постоянно получаю сообщение об ошибке «/bin/sh неверный интерпретатор»?

Эта ошибка возникает из-за доступа к интерпретатору сценария в несуществующем местоположении.

Termux не имеет общих каталогов, таких как /bin, /sbin, /usr/bin в их стандартном месте. Существует исключение для определенных устройств, где /bin является символической ссылкой на /system/bin, но это не имеет значения.

Интерпретаторы должны быть доступны только в этом каталоге:

/data/data/com.termux/files/usr/bin

Есть три способа исправить это:

  • Установите termux-exec с помощью pkg install termux-exec. Это не повлияет на текущую сессию, но после перезагрузки должно работать без каких-либо настроек. Не требуется, если ваш Termux обновлен. Если по-прежнему не работает, попробуйте следующий обходной путь.
  • Используйте команду termux-fix-shebang, чтобы исправить строку shebang в указанном файле.
  • Используйте termux-chroot из пакета proot, чтобы настроить среду chroot, имитирующую обычную файловую систему Linux в Termux.

У меня работает termux-fix-shebang my_script.py второго метода, который изменяет шебанг (первая строка my_script.py) с #!/usr/bin/env python на #!/data/data/com.termux/files/usr/bin/env python. Поскольку /usr/bin/ не существует в Android, поэтому выдает ошибку /usr/bin/env: bad interpreter: No such file or directory. Другое решение запускается с python my_script.py, ни с my_script.py, ни с ./my_script.py.

В моем тесте termux-exec из первого метода работают, только если я добавил правильный шебанг в main script (дочерний элемент ИЛИ дочерний элемент дочернего сценария не требуется) и выполнил команду export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so.

И в связи с этим вопросом ошибка показывает /usr/bin/env посередине с /data/data/com.termux/files/usr/bin/wp, хотя шебанг скрипта #!/data/data/com.termux/files/usr/bin/bash выглядит нормально, это означает, что команда wp (расположенная в /data/data/com.termux/files/usr/bin/wp), используемая внутри скрипта, содержит шебанг #!/usr/bin/env wp и также должна изменить его на #!/data/data/com.termux/files/usr/bin/env wp . termux-exec первого метода также должен исправить этот конкретный случай (уже есть правильный шебанг в основном скрипте).

person Fruit    schedule 20.01.2021