Я столкнулся с некоторыми проблемами при запуске некоторых сценариев установки, на которые они жаловались bad interpreter
.
Итак, я сделал тривиальный пример, но не могу понять, в чем проблема, см. Ниже.
#!/usr/bin/env bash
echo "hello"
Выполнение сценария выше приводит к следующей ошибке
[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory
/usr/bin/env
Файл существует, смотрите ниже:
[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16 2014 /bin/env
[root@ech-10-24-130-154 dc-user]#
Если я изменю сценарий на использование обычного шебанга, #!/bin/bash
это не проблема. #!/bin/env bash
работает так же.
Чего не хватает в окружающей среде, чтобы позволить портативному шебангу работать?
ls -lL /usr/bin/env
возвращается, ls: cannot access /usr/bin/env: No such file or directory
так что я думаю, мне нужно изменить символическую ссылку? Могу ли я указать на это /bin/env
?
env --version
это 8.4 и ОС Red Hat Enterprise Linux Server версии 6.6.
shell-script
environment-variables
shebang
conorgriffin
источник
источник
Ответы:
ls -lL /usr/bin/env
показывает, что символическая ссылка не работает. Это объясняет, почему строка shebang не работает: ядро пытается и, очевидно, не может выполнить висячую символическую ссылку./usr/bin/env -> ../../bin/env
верно, если/usr
и/usr/bin
являются фактическими каталогами (не символическими ссылками). Очевидно, это не относится к вашей машине. Может быть/usr
, это символическая ссылка? (Очевидно, что это не символическая ссылка/
, иначе/usr/bin/env
будет тот же файл/bin/env
, что и символическая ссылка).Вам нужно исправить эту символическую ссылку. Вы можете сделать это абсолютной ссылкой:
Вы можете сделать это относительной ссылкой, но если вы делаете, убедитесь, что это правильно. Переключитесь на
/usr/bin
и запустите,ls -l relative/path/to/bin/env
чтобы убедиться, что вы все правильно поняли перед созданием символической ссылки.Это не настройка по умолчанию RHEL, поэтому вы должны были что-то изменить локально. Постарайтесь выяснить, что вы сделали, и могло ли это вызвать другие подобные проблемы.
источник
/usr/bin
был перенесен в другую файловую систему и является символической ссылкой на/vol_01/usr/bin
Здесь (Fedora 23)
/bin
есть символическая ссылка на/usr/bin
; Если у вас есть аналогичные настройки, символическая ссылка/usr/bin/env
просто покупает вам бесконечный цикл.Проверьте соответствующие пакеты, т.
rpm -qf /usr/bin/env /bin/env
Е. И переустановите их (здесьcoreutils
, т. Е.yum reinstall coreutils
Или аналогичные). Это должно исправить любое ошибочное обращение с людьми.источник
coreutils
но это не имело значения. Это довольно странно./usr/bin/env
является символической ссылкой с относительным путем к ее цели../../bin/env
. Так должно быть и то,/bin/env
что тоже существует. Поэтому я не понимаю, почему эта символическая ссылка не работает. Я заменил цель, чтобы она указывала на/bin/env
абсолютный путь, и это, похоже, сработало./bin
была символическая ссылка/usr/bin
на систему Коноргриффина, то/usr/bin/env
и/bin/env
был бы тот же файл.