Comment annuler la définition d'une variable en lecture seule dans Bash ?
$ readonly PI=3.14
$ unset PI
bash: PI: readonly variable
ou ce n'est pas possible ?
Comment annuler la définition d'une variable en lecture seule dans Bash ?
$ readonly PI=3.14
$ unset PI
bash: PI: readonly variable
ou ce n'est pas possible ?
Selon la page de manuel :
unset [-fv] [name ...]
... Read-only variables may not be
unset. ...
Si vous n'avez pas encore exporté la variable, vous pouvez utiliser exec "$0" "$@"
pour redémarrer votre shell, bien sûr vous perdrez aussi toutes les autres variables non exportées. Il semble que si vous démarrez un nouveau shell sans exec
il perd sa propriété de lecture seule pour ce shell.
En particulier en ce qui concerne la variable TMOUT. Une autre option si gdb n'est pas disponible est de copier bash dans votre répertoire personnel et de modifier la chaîne TMOUT dans le binaire en quelque chose d'autre, par exemple XMOUX. Exécutez ensuite cette couche supplémentaire de shell et vous ne serez pas interrompu.
Une alternative si gdb n'est pas disponible : Vous pouvez utiliser le site enable
commande pour charger un module personnalisé qui vous permettra de désactiver l'attribut "lecture seule". L'essentiel du code qui le fait :
SETVARATTR (find_variable ("TMOUT"), att_readonly, 1);
Évidemment, vous remplacerez TMOUT
avec la variable qui vous intéresse.
Si vous ne voulez pas transformer cela en un buildin vous-même, j'ai bifurqué de bash dans GitHub et ajouté un buildin entièrement écrit et prêt à compiler appelé readwrite
. L'engagement est à https://github.com/josephcsible/bash/commit/bcec716f4ca958e9c55a976050947d2327bcc195 . Si vous voulez l'utiliser, récupérez les sources de Bash avec mon commit, exécutez ./configure && make && make loadables
pour le construire, puis enable -f examples/loadables/readwrite readwrite
pour l'ajouter à votre session de course, puis readwrite TMOUT
pour l'utiliser.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.