ash: suppress readonly1.tests false positive; add readonly0.tests

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-07-21 13:37:25 +02:00
parent 42ba757d5e
commit 0eed355eac
4 changed files with 62 additions and 4 deletions

View File

@ -0,0 +1,13 @@
readonly a='A'
readonly b='B'
Ok:0
./readonly0.tests: line 19: a: is read only
Fail:2
./readonly0.tests: readonly: line 21: a: is read only
Fail:2
./readonly0.tests: export: line 27: a: is read only
Fail:2
Fail:1

View File

@ -0,0 +1,45 @@
unset a b
#
readonly a=A
b=B
readonly b
# readonly on already readonly var is harmless:
readonly b a
readonly | grep '^readonly [ab]='
# this should work:
export a b
export -n a b
echo Ok:$?
env | grep -e^a= -e^b= # shows nothing
echo
# these should all fail (despite the same value being assigned)
# bash does not abort even in non-interactive more (in script)
# ash does, using subshell to continue
true; (a=A)
echo Fail:$?
true; (readonly a=A)
echo Fail:$?
echo
# in bash, assignment in export fails, but export succeeds! :)
# we don't mimic that!
true; (export a=Z)
echo Fail:$?
#env | grep '^a='
#echo "^^^a is exported"
export -n a # undo that bashism, if it happens
## ash: assignment errors in "a=Z CMD" lead to CMD not executed
## echo
## export b
## # this fails to both set and export a:
## a=Z env | echo grep '^[ab]='
## echo "^^^a is not exported"
## # but external command does get executed, and $? is not mangled (stays 42):
## (exit 42); a=Z env echo Visible:$?
echo
# ash: this fails *silently*, bug? bash says "cannot unset: readonly variable"
true; unset a
echo Fail:$?

View File

@ -1,2 +1,2 @@
One:1 Fail:2
One:1 Fail:2

View File

@ -1,7 +1,7 @@
readonly bla=123 readonly bla=123
# Bare "eval bla=123" should abort ("eval" is a special builtin): # Bare "eval bla=123" should abort ("eval" is a special builtin):
(eval bla=123 2>/dev/null; echo BUG) (eval bla=123 2>/dev/null; echo BUG)
echo One:$? echo Fail:$?
# "command BLTIN" disables "special-ness", should not abort: # "command BLTIN" disables "special-ness", should not abort:
command eval bla=123 2>/dev/null command eval bla=123 2>/dev/null
echo One:$? echo Fail:$?