summaryrefslogtreecommitdiff
path: root/tests/misc/env.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/misc/env.sh')
-rwxr-xr-xtests/misc/env.sh15
1 files changed, 10 insertions, 5 deletions
diff --git a/tests/misc/env.sh b/tests/misc/env.sh
index c4b97377a..883c58f54 100755
--- a/tests/misc/env.sh
+++ b/tests/misc/env.sh
@@ -20,6 +20,10 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ env
+# A simple shebang program to call "echo" from symlinks like "./-u" or "./--".
+echo "#!$abs_top_builddir/src/echo simple_echo" > simple_echo \
+ || framework_failure_
+chmod a+x simple_echo || framework_failure_
# Verify clearing the environment
a=1
@@ -105,9 +109,10 @@ 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.
+# Avoid the issue by using a shebang to 'echo' passing a second parameter
+# before the '-i'. See the definition of simple_echo before.
# Test -u, rather than -i, to minimize PATH problems.
-ln -s "$abs_top_builddir/src/echo" ./-u || framework_failure_
+ln -s "simple_echo" ./-u || framework_failure_
case $(env -u echo echo good) in
good) ;;
*) fail=1 ;;
@@ -117,16 +122,16 @@ case $(env -u echo -- echo good) in
*) fail=1 ;;
esac
case $(env -- -u pass) in
- pass) ;;
+ *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_
+ln -s "simple_echo" ./-- || framework_failure_
case $(env a=b -- true || echo fail) in
- true) ;;
+ *true) ;;
*) fail=1 ;;
esac