Re: [PATCH] git-prompt: fix reading files with windows line endings
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Nov 30, 2017, 00:21 UTC
- Message-ID
- <alpine.DEB.2.21.1.1711300100320.6482@virtualbox>
- In-Reply-To
- <d57e4cb9-b0b4-314e-370a-e0db58a2a7da@robertabel.eu>
Hi Robert,
On Wed, 29 Nov 2017, Robert Abel wrote:
Show 11 quoted lines
> On 29 Nov 2017 15:27, Johannes Schindelin wrote: > > > Or maybe keep with the Bash construct, but guarded behind a test that we > > area actually running in Bash? Something like > > > > test -z "$BASH" || IFS=$' \t\r\n' > > Actually, this got me thinking and reading the POSIX.1-2008, specifically > http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html. > > It seems POSIX states that IFS should be supported by read.
Yes, that's what I meant: you could use IFS.
> This means that it should be okay to just do > > > test -r "$f" && IFS=" \t\r\n" read "$@" < "$f"
I am afraid that this won't work: when I call
printf '123\r\n' | while IFS=" \t\r\n" read line do printf '%s' "$line" | hexdump -C done
it prints
00000000 31 32 33 0d |123.| 00000004
If I replace the double-quoted IFS by the dollar-single-quoted one, it works again. I think the reason is that \t, \r and \n are used literally when double-quoted, not as <HT>, <CR> and <LF>.
Ciao, Johannes