A primeira mensagem de erro é : command not found
, em vez do formato usual bash: SOMECOMMAND: command not found
. Isso indica que algo suspeito está acontecendo.
O que está acontecendo é que o script contém caracteres retorno de carro no final de algumas linhas. No Windows, uma nova linha é representada pela sequência de dois caracteres CR, LF (retorno de carro seguido por avanço de linha). Em todos os sabores do Unix, uma nova linha é representada apenas pelo caractere LF. Bash vê uma linha como SOMECOMMAND␍
sendo ␍
é um caractere CR, que é analisado como uma chamada para o comando chamado SOMECOMMAND␍
. Como não existe tal comando, o bash exibe sua mensagem de erro usual.
No terminal, o caractere de controle CR move o cursor de volta para o começo da linha. Então o resto da mensagem substitui o nome do comando.
A correção não é usar um editor do Windows para editar scripts de shell ou configurar seu editor para não colocar caracteres CR em shell scripts.
Para converter um arquivo existente no Linux ou no Cygwin de finais de linha do Windows para finais de linha do Unix, você pode usar o seguinte comando. Ele funciona mesmo se o arquivo original tiver misturado finais de linha do Windows e do Unix.
sed -i -e 's/\r$//' parte.sh