diff options
author | jilles <jilles@FreeBSD.org> | 2010-05-28 22:40:24 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2010-05-28 22:40:24 +0000 |
commit | c5fcbff43a2eb7923cdded83de0b4529deba1ca1 (patch) | |
tree | 5a790475e2c817e156e002a6faead7c8f13cc265 /tools | |
parent | bb4be30b2dbb8dae012830d33db99d965bf90222 (diff) | |
download | FreeBSD-src-c5fcbff43a2eb7923cdded83de0b4529deba1ca1.zip FreeBSD-src-c5fcbff43a2eb7923cdded83de0b4529deba1ca1.tar.gz |
sh: Recognize "--" in . and exec.
Although "--" historically has not been required to be recognized for
certain special builtins that do not take options in POSIX, some other
implementations recognize options for them, requiring scripts to use "--" or
avoid operands starting with "-".
Operands starting with "-" can be avoided with eval by prepending a space,
and cannot occur with break, continue, exit, return and shift as they only
take numbers, nor with times as it does not take operands. With . and exec,
avoiding "-" is not so easy as it may require reimplementing the PATH
search; therefore the current proposal for POSIX is to require recognition
of "--" for them.
We continue to accept other strings starting with "-" as operands to . and
exec, and also "--" if it is alone to . (which would otherwise be invalid
anyway).
Diffstat (limited to 'tools')
-rw-r--r-- | tools/regression/bin/sh/builtins/dot2.0 | 21 | ||||
-rw-r--r-- | tools/regression/bin/sh/builtins/exec2.0 | 25 |
2 files changed, 46 insertions, 0 deletions
diff --git a/tools/regression/bin/sh/builtins/dot2.0 b/tools/regression/bin/sh/builtins/dot2.0 new file mode 100644 index 0000000..ed6379b --- /dev/null +++ b/tools/regression/bin/sh/builtins/dot2.0 @@ -0,0 +1,21 @@ +# $FreeBSD$ + +failures= +failure() { + echo "Error at line $1" >&2 + failures=x$failures +} + +T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) || exit +trap 'rm -rf $T' 0 +cd $T || exit 3 +unset x +echo 'x=2' >testscript +. -- ./testscript +[ "$x" = 2 ] || failure $LINENO +cd / || exit 3 +x=1 +PATH=$T:$PATH . -- testscript +[ "$x" = 2 ] || failure $LINENO + +test -z "$failures" diff --git a/tools/regression/bin/sh/builtins/exec2.0 b/tools/regression/bin/sh/builtins/exec2.0 new file mode 100644 index 0000000..a04bf34 --- /dev/null +++ b/tools/regression/bin/sh/builtins/exec2.0 @@ -0,0 +1,25 @@ +# $FreeBSD$ + +failures= +failure() { + echo "Error at line $1" >&2 + failures=x$failures +} + +( + exec -- >/dev/null + echo bad +) +[ $? = 0 ] || failure $LINENO +( + exec -- sh -c 'exit 42' + echo bad +) +[ $? = 42 ] || failure $LINENO +( + exec -- /var/empty/nosuch + echo bad +) 2>/dev/null +[ $? = 127 ] || failure $LINENO + +test -z "$failures" |