This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: shopt igncr not working


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]