public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: cygwin@cygwin.com
Subject: Re: bash: igncr shell option breaks my PS1 prompt
Date: Tue, 30 Aug 2016 02:21:00 -0000	[thread overview]
Message-ID: <8980687a-967e-88d8-2a94-f485731fafe9@redhat.com> (raw)
In-Reply-To: <CAPTiy3N-n5krtWcZuK8-pBQE_efzroS6rizknHqU2tE+BYaMQQ@mail.gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 2552 bytes --]

On 08/28/2016 03:20 PM, Gene Pavlovsky wrote:
> Re-posting a reply I got from Henri (aka Houder) houder@xs4all.nl
> His letter follows:
> 
> Hi Gene,
> 
> Reread your entry to the mailing list ...
> 
>> Apparently the latest bash in Cygwin modified the read builtin to use
>> Cygwin-specific shell option igncr to control ignoring \r characters
>> in the input (still not clear if that ignores \r\n sequences, or \r
>> followed by anything else will be also ignored).
> 

If the igncr shell option (currently Cygwin-specific, but Chet says that
he is amenable to reviewing it for upstream inclusion in 4.5 once 4.4 is
released any day now) is enabled, then it eats ALL \r, regardless of
context.  In other words, it ignores all carriage returns, as per the name.

>> I considered enabling the `igncr` option everywhere, by declaring a
>> SHELLOPTS=igncr Windows environment variable, however immediately it
>> created an issue with my two-line PS1 prompt, which contains \n.
>>
>> # PS1='\e[1;30m\D{%T}\e[m$(test \j -ne 0 && echo "
>> \e[1;37mj:\j\e[m")${STY:+ \e[1;32m${STY%%.*}\e[m} \e[1;33m\w\e[m\n# '
>> 14:32:22 /usr/local/bin
>> # set -o igncr
>> bash: command substitution: line 1: syntax error near unexpected token `)'
>> bash: command substitution: line 1: `test 0 -ne 0 && echo " j:0")'
>> 14:32:24{STY:+ } /usr/local/bin
>> # set +o igncr
>> 14:32:26 /usr/local/bin
>> #
>>
>> What's wrong with this? It works fine on a Linux box.
>> I'm considering rolling back bash until I can figure this out.

Eating \n is NOT supposed to happen, so it may be that some other bug is
still present in the code.  At least you have given me a test case, so I
can try and reproduce it, and upload a version of bash that does not
have the problem if I can find where the bug actually lives.

But it seems like \n handling in PS1 is independent of any change in
handing in the 'read' builtin.  As evidence, I ran the following test
using the older bash-4.3.42-4 build:

$ bash-4.3.42-4
$ set -o igncr
$ PS1='$(date)\n# '
bash: command substitution: line 1: syntax error near unexpected token ')'
bash: command substitution: line 1: `date)'

$ exit

So you have uncovered a latent problem, unrelated to the recent igncr
fixes, but which is indeed tied to the overall igncr patches, and which
you had no reason to trip over until the igncr change to 'read' changed
your desire to use igncr.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

  reply	other threads:[~2016-08-29 17:43 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-27 16:20 Gene Pavlovsky
2016-08-27 18:31 ` Andrey Repin
2016-08-29  5:18 ` Gene Pavlovsky
2016-08-30  2:21   ` Eric Blake [this message]
2016-08-30  7:49     ` Andrey Repin
2016-08-30 16:57       ` Nellis, Kenneth
2016-08-30 17:38         ` Houder
2016-08-30 13:16     ` Houder
2016-08-30 17:04       ` Eric Blake
2016-08-30 20:50         ` Houder
2016-09-02 11:52         ` Gene Pavlovsky
2016-09-02 13:32           ` Eric Blake
2016-09-04  9:11             ` Gene Pavlovsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8980687a-967e-88d8-2a94-f485731fafe9@redhat.com \
    --to=eblake@redhat.com \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).