shopt igncr not working

Matthew Woehlke mwoehlke@tibco.com
Fri Oct 13 15:32:00 GMT 2006


Rob Walker wrote:
> Matthew Woehlke wrote:
>> Rob Walker wrote:
>>> Saying cygwin's bash wasn't designed to handle CRLF is a lot like 
>>> saying that cygwin's bash (as previously released all these years) 
>>> wasn't designed to work with the rest of Windows.  This might 
>>> actually be the case, but I don't understand the point.  If you don't 
>>> want to work with Windows, why release for Windows?
>>>
>>> Many, many other cross-platform products make allowances for CRLF 
>>> (version control systems are a prime example) to maximize 
>>> compatibility, and thereby their usefulness, on Windows.  Cygwin's 
>>> recent changes (with make and bash) here has put a real crimp in my 
>>> plans to depend on cygwin for a portable build environment.
>>>
>>> Just curious, is there a goal or strategy that drives changes like this?
>>
>> Speed?
>
> I was actually asking a larger question.  There's obviously value in 
> handling CRLF invisibly, and value in having speed.  When evaluating 
> which is _more_ valuable, what are the inputs?

Clearly speed is valued over making CRLF work in binmode mounts, which 
was never supposed to be the case in the first place.

> But seriously, dude.  If handling CRLF starts to approach in complexity 
> what the rest of bash does, CRLF handling should probably be rewritten.

I believe that's what igncr *does*. IOW you already got this wish.

>> I think using 'igncr' should satisfy your complaints. If it doesn't, 
>> you need to tell use WHY (which, you'll notice, the OP failed to do).
> So far, igncr hasn't worked for me either.  I think this is because I 
> don't know how to use it.
> 
> This is the simple shell script I'd like to have work (lines separated 
> by CRLF):
> 
>   #!/bin/bash
>   echo helloworld
> 
> I have c:/tmp mounted at /tmp, where I put my test script (called 
> helloworld.sh):
> 
>   rwalker@maiden> pwd
>   /tmp
>   rwalker@maiden> mount
>   C:\Documents and Settings on /home type system (binmode)
>   C:\apps\cygwin\bin on /usr/bin type system (binmode)
>   C:\apps\cygwin\lib on /usr/lib type system (binmode)
>   C:\apps\cygwin on / type system (binmode)
>   C:\tmp on /tmp type system (binmode)
>   A: on /a type system (binmode)
>   C: on /c type system (binmode)
>   D: on /d type system (binmode)
> 
> When I run this script, this is what I see (when run from the "Cygwin 
> Bash Shell" DOS box):
> 
>   rwalker@maiden> bash --version
>   GNU bash, version 3.1.17(9)-release (i686-pc-cygwin)
>   Copyright (C) 2005 Free Software Foundation, Inc.
>   rwalker@maiden> ./helloworld.sh
>   hello world
>   : command not foundne 3:

Ok, no surprises.

> I also tried this way:
> 
>   rwalker@maiden> bash -O igncr
>   rwalker@maiden> ./helloworld.sh
>   hello world
>   : command not foundne 3:

This won't work; shopts are not inherited. You'll need to set it on 
environment startup if you're going with this approach (check the 
archives for how).

> I also tried editing the script (which I fear breaks it for non 3.x 
> users of bash):
> 
>   #!/bin/bash -O igncr
>   echo helloworld

Is there any chance 'which bash' is not /bin/bash or /usr/bin/bash? 
Otherwise this seems strange, but not being a shebang guru I cannot 
think of why it shouldn't work.

Did you try adding 'shopt igncr' to the script? This won't (shouldn't, 
at least!) break it for non-3.1-9 users (and if you stick a 2>/dev/null 
after it, won't print errors).

> What does work for me is:
> 
>   rwalker@maiden> bash -O igncr ./helloworld.sh
>   hello world

Yup, that ought to work... Obviously it's not the best solution, though.

-- 
Matthew
"What's Cygwin?" you ask.
'Tis mostly absurd software
Concerning hippos.


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list