Problema de sintaxe do Cygwin

0

Estou no Windows 7 usando o Cygwin.

Meu script e arquivo de texto estão localizados no mesmo diretório.

#!/bin/bash
while read name; do
echo "Name read from file - $name"
done < /home/Matt/servers.txt

Eu recebo este erro e não sei porque porque isso está correto enquanto a sintaxe do loop ..?

u0146121@U0146121-TPD-A ~/Matt
$ ./script.sh
./script.sh: line 4: syntax error near unexpected token 'done'
./script.sh: line 4: 'done < /home/Matt/servers.txt'

Alguém pode me dizer o que estou fazendo errado? Acho que é porque estou no windows e usando o Cygwin.

    
por mkrouse 01.07.2013 / 17:27

2 respostas

0

Este script tem finais de linha CR LF. Isso é mais visível com od .

$ od -c script
0000000   #   !   /   b   i   n   /   b   a   s   h  \r  \n   w   h   i
0000020   l   e       r   e   a   d       n   a   m   e   ;       d   o
0000040  \r  \n   e   c   h   o       "   N   a   m   e       r   e   a
0000060   d       f   r   o   m       f   i   l   e       -       $   n
0000100   a   m   e   "  \r  \n   d   o   n   e       <       /   h   o
0000120   m   e   /   M   a   t   t   /   s   e   r   v   e   r   s   .
0000140   t   x   t  \r  \n
0000145

Como você pode ver, eu tenho os caracteres \r (retorno de carro) e \n (alimentação de linha) no final de cada linha, onde você deve ter apenas \n caracteres. Isso é resultado de um problema de compatibilidade entre os sistemas Windows e * nix. O Bash tem dificuldade em lidar com os caracteres \r .

Você pode corrigir seu script usando um utilitário como dos2unix ou executando o seguinte comando sed :

sed -i 's/\r$//' script
    
por 02.07.2013 / 16:57
0

A resposta anterior está correta, pois o Windows colocará \ r \ n mas os sistemas * nix só aceitarão \ n. No entanto, há uma maneira extremamente fácil de resolver isso em uma máquina Windows.

Em um editor de texto como o Textpad, escolha "Salvar como" e, sob o nome do arquivo, escolha "Final da linha". Aqui, salve-o como "UNIX", e o arquivo será codificado corretamente e seus scripts funcionarão bem.

    
por 06.08.2016 / 20:10