On Wednesday, July 23, 2014 07:58:26 AM Eric Blake wrote: > On 07/23/2014 07:51 AM, Dan Douglas wrote: > > On Wednesday, July 23, 2014 09:28:02 AM you wrote: > >> On 7/23/14, 8:22 AM, Dan Douglas wrote: > >>> Hi, from this discussion: > >>> > >>> https://github.com/koalaman/shellcheck/issues/195#issuecomment-49678200 > >>> > >>> I can't find any reference that says substituting a literal tilde in PATH > >>> should occur during command search. > >> > >> Bash has always done this, even back to the pre-version 1 days, and I don't > >> see any reason to change it now. > >> > > > > The only concerns I can think of are inconsistency with programs that use > > execvp(), or possibly double-expansion in the event of a user name or any > > path > > containing ~. > > > > You're probably right in that it's not super critical if it hasn't caused > > problems so far. > > Might be worth asking the POSIX folks if it is allowed by POSIX. What > do other shells do? >
I tested it in the link from my first post. AFAICT Bash is the only one.
#!/bin/bash
printf '%s\n' '#!/bin/sh' 'echo test' >~/tmpdir/testscript
chmod u+x ~/tmpdir/testscript
s=(bash ksh mksh posh zsh dash bb jsh)
# Testing for parameter expansion.
for sh in "${s[@]}"; do
printf '%-4s %s\n' "${sh}:" "$("$sh" -c 'PATH=\${HOME}/tmpdir; testscript'
2>&1)"
done
echo
# Testing for tilde expansion.
for sh in "${s[@]}"; do
printf '%-4s %s\n' "${sh}:" "$("$sh" -c 'PATH=\~/tmpdir; testscript' 2>&1)"
done
bash: bash: testscript: command not found
ksh: ksh: testscript: not found
mksh: mksh: testscript: not found
posh: posh: testscript: not found
zsh: zsh:1: command not found: testscript
dash: dash: 1: testscript: not found
bb: bb: testscript: not found
jsh: jsh: testscript: not found
bash: test
ksh: ksh: testscript: not found
mksh: mksh: testscript: not found
posh: posh: testscript: not found
zsh: zsh:1: command not found: testscript
dash: dash: 1: testscript: not found
bb: bb: testscript: not found
jsh: jsh: testscript: not found
--
Dan Douglas
signature.asc
Description: This is a digitally signed message part.
