Cygwin Sözdizimi Sorunu


0

Windows 7'de Cygwin kullanarak.

Komut dosyam ve metin dosyam aynı dizinde bulunuyor.

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

Bu hatayı alıyorum ve bunun neden döngüsel sözdizimi sırasında doğru olduğunu bilmiyorum ..?

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'

Birisi bana yanlış yaptığımı söyleyebilir mi? Sanırım çünkü pencerelerde ve Cygwin kullanıyorum.


Unix'te çalıştığını mı demek istiyorsun?
golimar

@golimar hayır hiç test etmedi
mkrouse

neden bir döngü yapmıyorsun? IMHO çok daha okunaklı olurdu (üzgünüm soruyu cevaplamıyor)
pataluc

@pataluc: Çünkü while read... genellikle önerilen yöntemdir.
grawity

1
Komut dosyasını DOS tarzı satır sonları ile yazdırarak kontrol edin. cat -v /path/to/script ve satırların sonunda "^ M" yi aramak. "Bu benden beklediğim hatalara benzemiyor ama Cygwin ile kontrol etmek en iyisi.
Gordon Davisson

Yanıtlar:


0

Önceki cevap Windows \ r \ n yerleştireceği için doğrudur ancak * nix sistemleri sadece \ n kabul edecektir. Ancak bunu Windows makinede çözmenin son derece kolay bir yolu var.

Textpad gibi bir metin düzenleyicide "Farklı Kaydet" seçeneğini seçin ve dosya adının altında "Satır Sonu" seçeneğini seçin. Burada, "UNIX" olarak kaydedin, dosya düzgün bir şekilde kodlanacak ve scriptleriniz iyi çalışacaktır.


0

Bu betiğin CR LF satır sonları var. Bu daha görünür 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

Gördüğün gibi benim \r (satır başı) ve \n (satır besleme) her satırın sonunda, yalnızca \n karakter. Bu, Windows ve * nix sistemleri arasındaki uyumluluk sorununun bir sonucudur. Bash ile başa çıkmakta zorluk çekiyor \r karakter.

Komut dosyanızı, benzeri bir yardımcı programı kullanarak düzeltebilirsiniz. dos2unix veya aşağıdakileri çalıştırarak sed komut:

sed -i 's/\r$//' script
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.