diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2022-09-16 14:07:03 +0300 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2022-09-16 14:07:03 +0300 |
commit | 097c7b67ce86ff16a7cef7631b39e5ca4ee3d420 (patch) | |
tree | 1e9ea98f7d429c6bb3fd53d873f59213553d0ec1 | |
parent | Tests: Silence warnings about unused functions from tuktest.h. (diff) | |
download | xz-097c7b67ce86ff16a7cef7631b39e5ca4ee3d420.tar.xz |
xzgrep: Fix compatibility with old shells.
Running the current xzgrep on Slackware 10.1 with GNU bash 3.00.15:
xzgrep: line 231: syntax error near unexpected token `;;'
On SCO OpenServer 5.0.7 with Korn Shell 93r:
syntax error at line 231 : `;;' unexpected
Turns out that some old shells don't like apostrophes (') inside
command substitutions. For example, the following fails:
x=$(echo foo
# asdf'zxcv
echo bar)
printf '%s\n' "$x"
The problem was introduced by commits
69d1b3fc29677af8ade8dc15dba83f0589cb63d6 (2022-03-29),
bd7b290f3fe4faeceb7d3497ed9bf2e6ed5e7dc5 (2022-07-18), and
a648978b20495b7aa4a8b029c5a810b5ad9d08ff (2022-07-19).
5.2.6 is the only stable release that included
this problem.
Thanks to Kevin R. Bulgrien for reporting the problem
on SCO OpenServer 5.0.7 and for providing the fix.
-rw-r--r-- | src/scripts/xzgrep.in | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/scripts/xzgrep.in b/src/scripts/xzgrep.in index c5b89430..449f0e61 100644 --- a/src/scripts/xzgrep.in +++ b/src/scripts/xzgrep.in @@ -209,7 +209,7 @@ for i; do # which prints "binary file matches" to stderr instead of stdout. # # If reading from stdin, let grep use whatever name it prefers for - # stdin. With GNU grep it's a locale-specific translated string. + # stdin. With GNU grep it is a locale-specific translated string. if test "x$i" = "x-"; then eval "$grep -H" else @@ -226,12 +226,12 @@ for i; do (*' '* | *'&'* | *'\'* | *'|'*) # If sed fails, set i to a known safe string to ensure that - # failing sed didn't create a half-escaped dangerous string. + # failing sed did not create a half-escaped dangerous string. i=$(printf '%s\n' "$i" | LC_ALL=C sed 's/[&\|]/\\&/g; $!s/$/\\/') || i='(unknown filename):';; esac - # $i already ends with a colon so don't add it here. + # $i already ends with a colon so do not add it here. sed_script="s|^|$i|" # If grep or sed fails, pick the larger value of the two exit statuses. |