]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
xzgrep: Fix compatibility with old shells.
authorLasse Collin <lasse.collin@tukaani.org>
Fri, 16 Sep 2022 11:07:03 +0000 (14:07 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 16 Sep 2022 21:22:11 +0000 (00:22 +0300)
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.

src/scripts/xzgrep.in

index c5b8943063d4bc101177cfcf2e2c04abdf7ccfa4..449f0e61154d68e34bd842fb455fa0e495eb9f98 100644 (file)
@@ -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.