mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Make PATH properly survive a shared-state ${ comsub; }
Reproducer: $ ksh -c 'v=${ PATH=/dev/null; }; echo $PATH; whence ls' /dev/null /bin/ls The PATH=/dev/null assignment should survive the shared-state command substitution, and does, yet 'ls' is still found. The variable became inconsistent with the internal pathlist. This bugfix is from the 93v- beta. src/cmd/ksh93/sh/subshell.c: sh_subshell(): - Do not save and restore pathlist for a subshare. - A few other subshell tweaks from 93v- that made sense: . reset shp->subdup (bitmask for dups of 1) after saving it . use e_dot instead of "." for consistency . retry close(1) if it was interrupted src/cmd/ksh93/tests/path.sh: - Add test for this bug.
This commit is contained in:
parent
e3882fe71b
commit
caf7ab6c71
2 changed files with 26 additions and 7 deletions
|
@ -731,6 +731,15 @@ got=$({ FPATH=$tmp/fun.$$ "$SHELL" -c self; } 2>&1)
|
|||
(((e = $?) == 126)) || err_exit 'Function autoload recursion loop:' \
|
||||
"got status $e$( ((e>128)) && print -n / && kill -l "$e"), $(printf %q "$got")"
|
||||
|
||||
# ======
|
||||
# If a shared-state ${ command substitution; } changed the value of $PATH, the variable
|
||||
# would change but the internal pathlist would not, making path searches inconsistent.
|
||||
savePATH=$PATH
|
||||
got=${ PATH=/dev/null; }
|
||||
got=$(whence ls)
|
||||
PATH=$savePATH
|
||||
[[ -z $got ]] || err_exit "PATH search inconsistent after changing PATH in subshare (got $(printf %q "$got"))"
|
||||
|
||||
# ======
|
||||
exit $((Errors<125?Errors:125))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue