pkgsrc-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pkgsrc on Ubuntu: recent libtool bash/dash fallout with _bUiLdLiNk_
On Mon, Sep 22, 2014 at 07:47:28PM -0400, Greg Troxel wrote:
> Joerg Sonnenberger <joerg%britannica.bec.de@localhost> writes:
> > We don't support dash.
>
> Well, it seems we aim to have code that works on shells that conform
> to
> POSIX. Is this a case of something in dash feeling to meet POSIX?
One possible workaround would be to use printf instead of echo.
#!/bin/sh
echo='printf %s\n'
_sep=xyz
$echo "s|\([$_sep]\)$1\([$_sep]\)|\1$2\2|g"
This works with bash and dash as well, and printf is a shell-builtin, at
least in my local versions of bash and dash.
That it doesn't work in dash with echo is a misfeature/bug handling the
\<digit> escapes. This apparently only hits in the command line parser,
not the heredoc parser. (the latest change in
mk/wrapper/gen-transform.sh was to use "echo" instead of "cat"+heredoc)
example line from gen-transform.sh
$echo "s|\([$_sep]\)$1\([$_sep]\)|\1$2\2|g"
dash interprets the "\1" and "\2" as ctrl-a and ctrl-b.
$ dash -c 'echo "\1\2"' | hexdump -C
00000000 01 02 0a |...|
even with double backslash:
$ dash -c 'echo "\\1\\2"' | hexdump -C
00000000 01 02 0a |...|
and even when the backslash is in a variable:
$ dash -c 'bslash="\\"; echo "${bslash}z"; echo "${bslash}1"' | hexdump -C
00000000 5c 7a 0a 01 0a |\z...|
From the dash manpage, I understand that this should only apply when
there is a "0" after the backslash:
\0digits
Output the character whose value is given by zero
to three octal digits. If there are zero digits,
a nul character is output.
Does that also violate POSIX standards?
And even if this gets fixed in newer dash versions, it will probably not
be backported to existing Debian/Ubuntu distros.
Regards
Matthias
Home |
Main Index |
Thread Index |
Old Index