Eu suspeito que seu script pode ter finais de linha no estilo DOS. No DOS (e no Windows), cada linha de um arquivo de texto termina com o retorno de carro (variavelmente representado como \r
ou ^M
) seguido por um avanço de linha ( \n
ou ^J
). Os arquivos de texto Unix, por outro lado, terminam cada linha com apenas um avanço de linha. Se você der uma ferramenta unix (como bash) um arquivo formatado no DOS, ele interpretará o retorno de carro como parte da linha e ficará bastante confuso. Nesse caso, parece-me que FILE está sendo definido como /u0146121/bin/list.txt^M
, o que não existe, e quando o shell relata o problema, o retorno de carro confunde o terminal e o fim da mensagem de erro é impresso por cima do o começo.
Para verificar, tente imprimir seu script com cat -v /path/to/script
- se você vir ^ M no final das linhas, terá um arquivo no formato DOS. Seu sistema provavelmente tem um comando para traduzi-lo, mas o nome do comando varia (por exemplo, pode ser dos2unix
ou fromdos
ou ...). Se você não consegue encontrar um comando relevante, você pode usar este script perl trivial:
perl -pi -e 's/\r//g' /path/to/script