[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
It is possible to remove the readonly attribute from {BASH, SHELL}OPTS
From: |
Emanuele Torre |
Subject: |
It is possible to remove the readonly attribute from {BASH, SHELL}OPTS |
Date: |
Thu, 25 Jan 2024 01:06:32 +0100 |
User-agent: |
Mutt/2.2.12 (2023-09-09) |
I recently discovered that it is possible to set attributes on readonly
variables
$ declare -p PPID
declare -ir PPID="759437"
$ declare -l PPID
$ declare -p PPID
declare -irl PPID="759437"
I noticed SHELLOPTS and BASHOPTS among the default readonly variables
set by bash.
They are modified by bash whenever you set a set option or shopt.
I tried setting the -i attribute on them, and got this result:
$ declare -i SHELLOPTS
$ set -f
bash: set:
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:
syntax error in expression (error token is
":emacs:hashall:histexpand:history:interactive-comments:monitor:noglob")
$ declare -p SHELLOPTS
declare -i
SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
$ set -C
bash: set:
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob:
syntax error in expression (error token is
":emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob")
$ declare -p SHELLOPTS
declare -i
SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
$ SHELLOPTS=123; declare -p SHELLOPTS
declare -i SHELLOPTS="123"
$ set +B
emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob:
syntax error in expression (error token is
":hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob")
$ declare -p SHELLOPTS
declare -i SHELLOPTS="123"
$ declare +i SHELLOPTS=hello; declare -p SHELLOPTS
declare -- SHELLOPTS="hello"
$ set -o posix
$ declare -p SHELLOPTS
declare -r
SHELLOPTS="emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob:posix"
The arithmetic syntax error caused by trying to assign the new list of
options to SHELLOPTS prevents bash from changing its value, and
re-adding the readonly attribute to SHELLOPTS.
Then SHELLOPTS can be modified, and unset freely. :-)
The same is possible with BASHOPTS.
o/
emanuele6
- It is possible to remove the readonly attribute from {BASH, SHELL}OPTS,
Emanuele Torre <=