summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2022-09-16 14:07:03 +0300
committerLasse Collin <lasse.collin@tukaani.org>2022-09-17 00:22:11 +0300
commit974186f7cd839f1dbf937b98e112dff670d2bd5c (patch)
treed8ddd136ec1bce4600581c5372151515b295393d
parentf94da15120c3d3c363ca12c2262ac6cb9f321f4f (diff)
downloadxz-974186f7cd839f1dbf937b98e112dff670d2bd5c.tar.gz
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.in6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/scripts/xzgrep.in b/src/scripts/xzgrep.in
index c5b8943..449f0e6 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.