Eric Blake <ebb9 <at> byu.net> writes:

>  cat <<EOF
> -3. $LINENO
> -4. $LINENO
> +5. $LINENO
> +6. $LINENO
> +7. \$LINENO
>  EOF

>  $ @kbd{sed '=' <lineno |}
> @@ -14493,16 +14534,28 @@ Special Shell Variables
>  > @kbd{  ' |}
>  > @kbd{  sh}
...
> +7. \7

Ouch.  Our sed preprocess has the possibility of generating non-portable child 
scripts.  Anywhere where the parent script uses:

cat >>child <<EOF
AS_ESCAPE([text], [$`])
EOF

then any instances of $LINENO in text will be turned into \$LINENO.  But since 
the sed preprocess currently munges that instance, the \ is no longer quoting a 
special character, so we have inserted a raw \ into the child script.  In turn, 
as demonstrated by the above simple example, we could be causing other 
portability nightmares such as calling the non-portable 'echo "\7"' instead of 
the intended 'echo "$LINENO"' in a shell with LINENO support.

But is it even possible to write the sed script more robustly, as we really 
don't know the difference between here-doc contents and other instances of 
\$LINENO?

-- 
Eric Blake





Reply via email to