Script de bash anexando ^ M ao nome do arquivo

4

Em um dos meus scripts bash, estou criando um arquivo repetidamente usando echo com o redirecionamento de saída para anexar ao arquivo. O arquivo resultante, no entanto, não é nomeado corretamente, mas sempre tem um caractere ^M não imprimível anexado ao final. Alguém sabe o que estou fazendo errado? O script simples a seguir demonstra o problema:

#!/bin/bash
# Should create 'concat.txt' instead creates 'concat.txt^M'
outfile="concat.txt"
echo "'"$outfile"'"
for item in "Able" "Baker" "Charlie"; do
    echo $item >> $outfile
done

Sistema: Ubuntu 9.04 (x64)

    
por Joseph Sturtevant 11.09.2009 / 01:07

2 respostas

12

Eu suspeito que você tenha editado o arquivo em algum lugar que tenha adicionado finais de linha no estilo DOS. Execute seu arquivo através de dos2unix para se livrar deles.

dos2unix yourscriptfile
    
por 11.09.2009 / 01:28
4

^M é o que você veria no final de cada linha se você definir a linha que termina no modo unix quando o arquivo foi gravado inicialmente no modo dos em que os finais de linha são \r\n

Então, enquanto você vê

echo $item >> $outfile

o unix vê:

echo $item >> $outfile^M

Primeiro,

:set ff=unix

Então:

:%s/\r//

para remover o ^ M

EDITAR

Por alguma razão boba eu assumi que você está usando o vim. Talvez porque é o único editor que vi mostrar o \r as ^M . De qualquer forma, faça o que Dennis Williamson disse, use a ferramenta dos2unix .

    
por 11.09.2009 / 01:26

Tags