I recently converted from a very old version of Cygwin Beta 20 (circa 1999) to the latest 1.5.25-7 version of the Cygwin DLL. I noticed when I tried to execute some of my existing scripts that had executed under the old beta version, I now would receive a lot of these errors:
./script.sh: line 40: $'\r': command not found
or
./script.sh: line 5: syntax error near unexpected token `$'do\r''
Looks to me like the command interpreter on the new version of Cygwin is a lot more picky than the old one. Specifically, Cygwin is choking on the carriage returns that Windows XP Notepad inserts at the end of each line of the file. Yuk.
I wondered if this was something configurable with an environment variable (http://www.cygwin.com/cygwin-ug-net/setup-env.html), so I first tried setting the CYGWIN environment variable to nobinmode (http://www.cygwin.com/cygwin-ug-net/using-cygwinenv.html). Unfortunately, this change had no effect. I did find a bit of background here:
http://cygwin.com/faq/faq-nochunks.html#faq.api.cr-lf
I had a bit more success using one of the nice little utilities Cygwin has called "dos2unix". Dos2Unix strips out any carriage return or line feed characters in text files and automatically saves the file. The command is simple:
dos2unix [filename]
where [filename] is the name of the file you wish to convert. Dos2Unix has no man page, so don't bother looking for it.
Unfortunately, I had quite a few scripts in various directories, so I just went through each directory and typed:
dos2unix *.sh
I could have written a script to interate through the directories, but there were only about fifteen, so I got lazy and just ran the command manually. After running the command, I was able to execute the scripts without error.
Nice!
Cacasodo
Wednesday, February 06, 2008
upgrading Cygwin: dos2unix
Labels:
carriage return,
cygwin,
dos2unix,
line feed,
shell script,
unix
If you appreciated this answer..consider buying me a beer via PayPal!
I'm easy..$1 Draft would be great! THANKS!
Subscribe to:
Post Comments (Atom)
Feel free to drop me a line or ask me a question.
No comments:
Post a Comment