Por que #! / usr / bin / env bash não está funcionando no meu sistema?

9

Eu tive alguns problemas ao executar alguns scripts de instalação em que eles se queixaram de bad interpreter .

Então eu fiz um exemplo trivial, mas não consigo descobrir qual é o problema, veja abaixo.

#!/usr/bin/env bash
echo "hello"

Executar o script acima resulta no seguinte erro

[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory

O arquivo /usr/bin/env existe, veja abaixo:

[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]#

Se eu alterar o script para usar o shebang regular #!/bin/bash , não há problema. #!/bin/env bash funciona também.

O que falta no ambiente para permitir que o shebang portátil funcione?

ls -lL /usr/bin/env retorna ls: cannot access /usr/bin/env: No such file or directory , por isso acho que preciso alterar o link simbólico? Posso apontar para /bin/env ?

env --version é 8.4 e o SO é o Servidor Red Hat Enterprise Linux versão 6.6.

    
por conorgriffin 27.01.2016 / 11:25

2 respostas

7

ls -lL /usr/bin/env mostra que o link simbólico está quebrado. Isso explica por que a linha shebang não está funcionando: o kernel está tentando, e obviamente falhando, executar um link simbólico pendente.

/usr/bin/env -> ../../bin/env está correto se /usr e /usr/bin forem ambos diretórios reais (não links simbólicos). Evidentemente, esse não é o caso da sua máquina. Talvez /usr seja um link simbólico? (Evidentemente, não é um link simbólico para / , caso contrário, /usr/bin/env seria o mesmo arquivo que /bin/env , não um link simbólico).

Você precisa corrigir esse link simbólico. Você pode torná-lo um link absoluto:

sudo ln -snf /bin/env /usr/bin/env

Você pode torná-lo um link relativo, mas se fizer isso, verifique se está correto. Mude para /usr/bin e execute ls -l relative/path/to/bin/env para confirmar que você acertou antes de criar o link simbólico.

Esta não é uma configuração padrão do RHEL, portanto, você deve ter modificado algo localmente. Tente descobrir o que você fez e se isso poderia ter causado outros problemas semelhantes.

    
por 28.01.2016 / 00:33
-1

Aqui (Fedora 23) /bin é um link simbólico para /usr/bin ; se você tiver uma configuração semelhante, o link simbólico de /usr/bin/env apenas lhe dará um loop infinito.

Verifique os pacotes relevantes, por exemplo, rpm -qf /usr/bin/env /bin/env e reinstale-os (aqui coreutils , ou seja, yum reinstall coreutils ou similar). Isso deve consertar qualquer maltrato equivocado.

    
por 27.01.2016 / 12:12