Outra maneira de limpar os retornos de carro da entrada é aproveitar o recurso do comando read
que apara espaços em branco iniciais e finais do que lê. Apenas redefina IFS
(basicamente, a definição de espaço em branco do shell) para incluir \r
, desta forma:
... while IFS=$' \t\n\r' read -r LINE ...
Observe que, como a definição de IFS
é um prefixo do comando read
, ela se aplica somente a esse comando e não atrapalha os outros itens (ou precisa ser restaurada ao normal mais tarde).
BTW, sua redefinição de IFS
no começo é bastante problemática, já que a barra invertida não é tratada como uma fuga nessa situação específica, então você definiu com eficiência \
e n
como os caracteres de espaço em branco . Isso pode ter realmente efeitos estranhos. Eu recomendo apenas deixar isso em paz.
Algumas outras recomendações: cat
para ler o arquivo; é inútil. Apenas redirecione a entrada, assim:
while IFS=$' \t\n\r' read -r LINE
do
...
done <"$1"
Além disso, é quase sempre uma boa idéia colocar aspas duplas em torno de referências de variáveis (como fiz acima para $2
) para evitar artefatos de análise estranhos. O mesmo vale para $LINE
. Ah, e também recomendo evitar nomes de variáveis em maiúsculas; Há um monte deles com significados especiais, e é fácil reutilizar acidentalmente um deles e obter resultados estranhos. É muito mais seguro usar nomes de variáveis com letras maiúsculas ou minúsculas.
Por fim, recomendo sempre adicionar uma verificação de erro ao comando cd
nos scripts, pois se ele falhar, o restante do script será executado em um local inesperado com resultados talvez bizarros. Algo parecido com isto:
cd /volume1/Backup/CMS_Data/CLIENT\ DATA\ COPY/ || {
echo "Error changing directory to CLIENT DATA COPY; giving up" >&2
exit 1
}