1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-08-17 17:08:20 +02:00

doc: document PATH interactions with env

* doc/coreutils.texi (env invocation): Mention that PATH is
modified prior to exec.
* tests/misc/env: Test this.
This commit is contained in:
Eric Blake
2009-10-26 09:26:00 -06:00
parent 243f1b1c71
commit 0f3f6bf6bf
2 changed files with 26 additions and 3 deletions
+5
View File
@@ -14408,6 +14408,11 @@ remaining arguments are passed as arguments to that program.
The program should not be a special built-in utility
(@pxref{Special built-in utilities}).
Modifications to @env{PATH} take effect prior to searching for
@var{command}. Use caution when reducing @env{PATH}; behavior is
not portable when @env{PATH} is undefined or omits key directories
such as @file{/bin}.
@cindex environment, printing
If no command name is specified following the environment
+21 -3
View File
@@ -51,9 +51,16 @@ test $? = 126 || fail=1
env no_such # no such command
test $? = 127 || fail=1
# Cygwin requires a minimal environment to launch new processes, so a
# subsequent env will show more than just what we set. Hence, it is
# more portable to grep that our desired changes took place.
# POSIX is clear that environ may, but need not be, sorted.
# Environment variable values may contain newlines, which cannot be
# observed by merely inspecting output from env.
# Cygwin requires a minimal environment to launch new processes: execve
# adds missing variables SYSTEMROOT and WINDIR, which show up in a
# subsequent env. Cygwin also requires /bin to always be part of PATH,
# and attempts to unset or reduce PATH may cause execve to fail.
#
# For these reasons, it is more portable to grep that our desired changes
# took place, rather than comparing output of env over an entire environment.
if env | grep '^ENV_TEST' >/dev/null ; then
skip_test_ "environment has potential interference from ENV_TEST*"
fi
@@ -85,6 +92,17 @@ ENV_TEST1=b
EOF
compare exp out || fail=1
# PATH modifications affect exec.
mkdir unlikely_name || framework_failure
cat <<EOF > unlikely_name/also_unlikely || framework_failure
#!/bin/sh
echo pass
EOF
chmod +x unlikely_name/also_unlikely || framework_failure
env also_unlikely && fail=1
test x`PATH=$PATH:unlikely_name env also_unlikely` = xpass || fail=1
test x`env PATH="$PATH":unlikely_name also_unlikely` = xpass || fail=1
# Use -- to end arguments.
ln -s "$abs_top_builddir/src/echo" ./-i || framework_failure
case `PATH="$PATH:" env -i echo good` in