Bad intérprete script de shell? Às vezes funciona

1

Eu tenho uma situação estranha em que alguns dos meus scripts de shell que usam #!/bin/sh como o shebang às vezes funcionam - outras vezes eles geram a seguinte mensagem:

bash: ./newshit.sh: /bin/sh^M: bad interpreter: No such file or directory

Existe algo simples que estou perdendo?

    
por dukevin 20.05.2011 / 11:00

2 respostas

2

Isso ^ M é uma oferta inoperante - parece que o script tem finais de linha do Mac (Ctrl-M) em vez de terminações de linha do Unix (Ctrl-J).

Ele não aparecerá como um literal ^ M - na verdade, dependendo do seu editor de texto, ele pode não ser exibido.

Você não diz qual sistema operacional você tem, então não tenho certeza de quais ferramentas você tem em seu sistema, mas você poderia tentar obter um dump de caractere (não hexadecimal) com:

od -tc newshit.sh

... e diga-nos se o / bin / sh é seguido por \ r, \ n ou \ r \ n?

Espero que você veja algo como:

0000000   #   !   /   b   i   n   /   s   h  \r

Ou se você executar:

cat -e newshit.sh

... que exibirá o caractere de retorno de carro se estiver lá.

    
por 20.05.2011 / 11:22
2

dos2unix newshit.sh corrigirá.

Editar: Como alternativa, se por algum motivo você não conseguir encontrar o dos2unix, esse script simples fará isso:

tr -d '\r' < newshit.sh > newshit-fixed.sh 
    
por 20.05.2011 / 11:29