aboutsummaryrefslogtreecommitdiff
path: root/shell/ash_test/ash-vars/readonly0.tests
diff options
context:
space:
mode:
Diffstat (limited to 'shell/ash_test/ash-vars/readonly0.tests')
-rwxr-xr-xshell/ash_test/ash-vars/readonly0.tests45
1 files changed, 45 insertions, 0 deletions
diff --git a/shell/ash_test/ash-vars/readonly0.tests b/shell/ash_test/ash-vars/readonly0.tests
new file mode 100755
index 000000000..94af79060
--- /dev/null
+++ b/shell/ash_test/ash-vars/readonly0.tests
@@ -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:$?