On Tue, 19 Jun 2012, Barry Smith wrote:
It appears that the extra '\r' char is causing bash to process strings incorrectly.
Yes, but exactly how? Run the winzip to get the extra \r in them.
BTW: unix2dos is equivalent to winzip wrt reproduction.
Then start removing them as you run the script to determine exactly where the grief comes from. I do not think the extra \r are always harmful, just if they come up in the wrong place. If you determine this you can reformat the original code to not have the bad \r cause grief.
Assume the extra char is 'x' [instead of '\r'] for illustration. i.e: var='foo'\r is represented as var='foo'x Note: the above is valid syntax [but 'var' will have extra stuff that wasn't intended] The primary issue is - if you have the following code [in dos formatted text]:
if [ 'a' == 'a'] then echo "yes" else echo "no" fi <<< It is interpreted as:
if [ 'a' == 'a']x thenx echo "yes"x elsex echo "no"x fix <<<
And you get the error "syntax error: unexpected end of file" One way to workarround is to add 'var=foo' before '\r' and get some valid bash syntax. i.e something like:
if [ 'a' == 'a'] then a='a'x echo "yes"; a='a'x else a='a'x echo "no"; a='a'x fi; a='a'x <<<<
So the fixed mpiexec.uni looks something like:
$ cat mpiexec.uni #!/bin/sh if [ $1 != "-np" -a $1 != "-n" ]; then a=a progname=$*; a=a elif [ $2 = "1" ]; then a=a shift ; shift; a=a progname=$* ; a=a else a=a echo "Uniprocessor version of MPI can only use one processor"; a=a exit 1; a=a fi; a=a a=a # Execute the program $progname;a=a exit 0;a=a <<<<<<<
There is an alternative of setting the following env before running bash scripts in cygwin - but these commands appear to be cygwin/bash specific [so cannot easily automate?]
export SHELLOPTS set -o igncr <now run the script> <<<<<<<<
Satish