Erro de interpretador incorreto ao executar o script de shell com a linha shebang correta

3

Ao executar um script a partir do caminho (scriptname, em vez de "sh scriptname"), recebo o seguinte erro:

-bash: ./gitup: / bin / bash /: bad intérprete: Não é um diretório

Todos os outros scripts no mesmo diretório são executados sem problemas, e eu não encontro este problema quando o script é executado manualmente (sh scriptname), somente quando executado sozinho. Portanto, o script, por si só, parece não ser o problema, pois é executado normalmente, e foi feito até que eu abri uma nova sessão de shell e encontrei esse erro apenas para esse script.

O script é executável, inclui todas as linhas de requisitos a serem executadas da maneira descrita por mim (funcionou corretamente até hoje) e pode ser executada pelo meu usuário, por isso não tenho certeza de qual poderia ser o problema.

A linha shebang lê #! / bin / bash. Eu usei o comando "export PATH = $ PATH: repos / utilities "para direcionar para o diretório que armazena esses scripts, os quais, além deste, são executados simplesmente chamando o nome do script (ou seja, gitup).

    
por tony_perkis666 28.01.2013 / 22:27

2 respostas

2

Há algumas coisas em que posso pensar.

  1. Você disse que seu script está em seu $ PATH, mas você o chama com o caminho completo ( ./gitup em vez de apenas gitup ). Será que você editou uma versão do script (a do seu $ PATH, digamos ~/bin/gitup ) e executou outra ( ./gitup )?

  2. Poderia haver várias versões no seu $ PATH? Você pode verificar com

    which -a gitup
    
  3. Você pode ter inadvertidamente inserido um caractere invisível ao editar o script. Verifique a linha shebang usando od :

    head -1 ./gitup | od -c
    

    Verifique se não há nada após #!/bin/bash , mas o caractere de nova linha ( \n ). Deve ficar assim:

    0000000   #   !   /   b   i   n   /   b   a   s   h  \n
    0000014
    
por 28.01.2013 / 22:30
1

Verifique a linha shebang ( #! ), certifique-se de que diz

#!/bin/bash

e não

#!/bin/bash/

Se parecer o segundo exemplo, mude para o primeiro.

EDITAR (em resposta a este comentário)

Se isso estiver limitado a apenas um script, faça uma cópia desse script e comece a remover o código dele e faça um script mínimo que ainda mostre esse problema. Então poste esse script mínimo.

    
por 28.01.2013 / 22:29