Me encontré con algunos problemas al ejecutar algunos scripts de instalación donde se quejaron bad interpreter
.
Así que hice un ejemplo trivial pero no puedo entender cuál es el problema, ver más abajo.
#!/usr/bin/env bash
echo "hello"
La ejecución de la secuencia de comandos anterior da como resultado el siguiente error
[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory
El /usr/bin/env
archivo existe, ver abajo:
[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]#
Si modifico el script para usar el shebang normal, #!/bin/bash
no funciona. #!/bin/env bash
funciona igual de bien
¿Qué le falta al entorno para permitir que el shebang portátil funcione?
ls -lL /usr/bin/env
vuelve ls: cannot access /usr/bin/env: No such file or directory
así que supongo que necesito alterar el enlace simbólico? ¿Puedo señalarlo /bin/env
?
env --version
es 8.4 y el sistema operativo es Red Hat Enterprise Linux Server versión 6.6.
fuente
Respuestas:
ls -lL /usr/bin/env
muestra que el enlace simbólico está roto. Eso explica por qué la línea shebang no está funcionando: el kernel está intentando, y obviamente falla, ejecutar un enlace simbólico colgante./usr/bin/env -> ../../bin/env
es correcto si/usr
y/usr/bin
son directorios reales (no enlaces simbólicos). Evidentemente, este no es el caso en su máquina. Tal vez/usr
es un enlace simbólico? (Evidentemente no es un enlace simbólico/
, de lo contrario/usr/bin/env
sería el mismo archivo que/bin/env
, no un enlace simbólico).Necesitas arreglar ese enlace simbólico. Puedes convertirlo en un enlace absoluto:
Puede convertirlo en un enlace relativo, pero si lo hace, asegúrese de que sea correcto. Cambia
/usr/bin
y ejecutals -l relative/path/to/bin/env
para confirmar que lo has hecho bien antes de crear el enlace simbólico.Esta no es una configuración predeterminada de RHEL, por lo que debe haber modificado algo localmente. Trate de averiguar qué hizo y si eso pudo haber causado otros problemas similares.
fuente
/usr/bin
se movió a otro sistema de archivos y es un enlace simbólico a/vol_01/usr/bin
Aquí (Fedora 23)
/bin
hay un enlace simbólico a/usr/bin
; Si tiene una configuración similar, el enlace simbólico/usr/bin/env
simplemente le compra un bucle infinito.Verifique los paquetes relevantes, es decir
rpm -qf /usr/bin/env /bin/env
, y vuelva a instalarlos (aquícoreutils
, es decir,yum reinstall coreutils
o similar). Eso debería arreglar cualquier mal manejo.fuente
coreutils
pero eso no hizo ninguna diferencia. Es muy raro/usr/bin/env
es un enlace simbólico con una ruta relativa a su objetivo../../bin/env
. Entonces eso debería ser lo/bin/env
que también existe. Así que no entiendo por qué ese enlace simbólico no funciona. Reemplacé el objetivo para que apunte/bin/env
con un camino absoluto y eso parece haber funcionado./bin
había un vínculo simbólico para/usr/bin
el sistema de conorgriffin, a continuación,/usr/bin/env
y/bin/env
sería el mismo archivo.