X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Message-ID: <4EFE163B.9040908@gmail.com> Date: Fri, 30 Dec 2011 19:51:23 +0000 From: Dave Korn User-Agent: Thunderbird 2.0.0.17 (Windows/20080914) MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: SHELLOPTS=igncr and bash --posix References: <4EFCDE35 DOT 4040302 AT cpan DOT org> <4EFD54D1 DOT 9080508 AT gmail DOT com> <4EFDB169 DOT 6050107 AT cpan DOT org> In-Reply-To: <4EFDB169.6050107@cpan.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On 30/12/2011 12:41, Rafael Kitover wrote: > On 12/30/2011 1:06 AM, Dave Korn wrote: >> On 29/12/2011 21:40, Rafael Kitover wrote: >>> Some of my bash scripts, particularly ones that are #!/bin/bash --posix >>> trigger a nasty warning when I have SHELLOPTS=igncr set in my ~/.zshrc: >>> >>> rkitover AT eeebox ~/src/scala % echo $SHELLOPTS >>> igncr >>> rkitover AT eeebox ~/src/scala % bash --posix >>> bash: SHELLOPTS: readonly variable >>> >>> this is rather unsightly so I have turned off SHELLOPTS for now. >>> >>> Is this a bug? >> Bug in your script I'm afraid. SHELLOPTS is indeed a readonly variable, it >> can only be set outside bash before starting it, definitely not from within a >> startup script. (Perhaps the reason it seems associated with --posix is >> because that selects different startup files? I'm guessing that you may have >> ENV=~/.zshrc because it's not normal behaviour for bash to read zsh's startup >> file!) > > I don't have ENV set. > > If I comment out the SHELLOPTS setting in ~/.zshrc then do this the > problem still appears: > > rkitover AT eeebox ~ % export SHELLOPTS=igncr > rkitover AT eeebox ~ % bash --posix > bash: SHELLOPTS: readonly variable > %{ > %}(%n@%m)[%h] %{%}%~%{%} > $ > > I do not have a ~/.profile, and ~/.bash_profile just reads ~/.bashrc. I > do not set SHELLOPTS in ~/.bashrc, it only has set -o igncr. Ah, I'm guilty of trusting the documentation too much. Turns out the problem is easy to reproduce without zsh being anything to do with it: even if you have SHELLOPTS set in the Windows environment and launch bash directly from cmd.exe, it still fails - > Microsoft Windows 2000 [Version 5.00.2195] > (C) Copyright 1985-2000 Microsoft Corp. > > C:\Documents and Settings\Administrator>set | grep SHELLOPT > SHELLOPTS=igncr > > C:\Documents and Settings\Administrator>bash --posix > bash: SHELLOPTS: readonly variable > bash-4.1$ A bit of googling and I discovered this is apparently a known bug in upstream bash, reported on the GNU bug-bash list back in October at http://lists.gnu.org/archive/html/bug-bash/2011-10/msg00039.html. A fix is promised for the next release but until then I'm afraid you're stuck with only being able to use one of SHELLOPTS and --posix at a time. >>> If so, is a fix possible? >> >> Use "set -o igncr" instead. > > But if I want to use CRLF #/bin/sh scripts from zsh, then I have to set > SHELLOPTS. You might be able to make it work by setting ENV (would be BASH_ENV, but you're using --posix) to point to a (LF-endings-only) script that contains "set -o igncr". Hopefully that will take effect before the newly-launched bash has a chance to get upset by any CRs in the script file it's been invoked on. (I can't guarantee that nothing will go wrong while parsing the shebang line if that ends with a CRLF, but you may as well give it a try.) cheers, DaveK -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple