diff options
author | Eric Blake <ebb9@byu.net> | 2009-10-26 13:32:49 -0600 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-10-26 21:30:34 -0600 |
commit | f00bbe33e41a9849351ea57c2706516d43e1e98d (patch) | |
tree | 1b8e228f7451a6624970850f97c5473f45957e79 /tests | |
parent | 0f3f6bf6bf38f1ed9c85fe98d6ac7645bf10a6c3 (diff) | |
download | coreutils-f00bbe33e41a9849351ea57c2706516d43e1e98d.tar.xz |
tests: clean up tests of env -- handling
The comment in env.c about -- handling has not matched the behavior
in the code since the initial commit back in 1992.
* src/env.c: Fix bogus comment.
* tests/misc/env: Further tweaks, avoiding PATH problems inherent
in testing -i, and testing program name containing =.
* doc/coreutils.texi (env invocation): Mention that intermediate
program is needed to invoke program with name containing =.
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/misc/env | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/tests/misc/env b/tests/misc/env index e1e51ed29..fb3be2994 100755 --- a/tests/misc/env +++ b/tests/misc/env @@ -103,25 +103,49 @@ 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 +# Explicitly put . on the PATH for the rest of this test. +PATH=$PATH: +export PATH + +# Use -- to end options (but not variable assignments). +# On some systems, execve("-i") invokes a shebang script ./-i on PATH as +# '/bin/sh -i', rather than '/bin/sh -- -i', which doesn't do what we want. +# Avoid the issue by using an executable rather than a script. +# Test -u, rather than -i, to minimize PATH problems. +ln -s "$abs_top_builddir/src/echo" ./-u || framework_failure +case `env -u echo echo good` in good) ;; *) fail=1 ;; esac -case `env -i -- PATH=. -i no-echo` in - no-echo) ;; +case `env -u echo -- echo good` in + good) ;; + *) fail=1 ;; +esac +case `env -- -u pass` in + pass) ;; + *) fail=1 ;; +esac + +# After options have ended, the first argument not containing = is a program. +env a=b -- true +test $? = 127 || fail=1 +ln -s "$abs_top_builddir/src/echo" ./-- || framework_failure +case `env a=b -- true || echo fail` in + true) ;; *) fail=1 ;; esac -# FIXME - POSIX does not allow this; decide what we want to do -# cat <<EOF >./c=d || framework_failure -# #!/bin/sh -# echo pass -# EOF -# chmod +x c=d || framework_failure -# test "x`env c=d echo fail`" = xfail || fail=1 -# test "x`env -- c=d echo fail`" = xpass || fail=1 +# No way to directly invoke program name containing =. +cat <<EOF >./c=d || framework_failure +#!/bin/sh +echo pass +EOF +chmod +x c=d || framework_failure +test "x`env c=d echo fail`" = xfail || fail=1 +test "x`env -- c=d echo fail`" = xfail || fail=1 +test "x`env ./c=d echo fail`" = xfail || fail=1 +test "x$(env sh -c '\c=d echo fail')" = xpass || fail=1 +test "x$(env sh -c 'exec "$@"' sh c=d echo fail)" = xpass || fail=1 # catch unsetenv failure, broken through coreutils 8.0 env -u a=b true && fail=1 |