printf %s\\n "$-"
Répertorie les options de lettre unique dans une seule chaîne.
Ce paramètre peut également être utilisé comme:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Pour désactiver d' -f
abord l'expansion du nom de fichier du shell tout en enregistrant simultanément une valeur pour $-
- le cas échéant - dans $1
. Ensuite, aucun glob ne se produit et la dernière +f
expansion du nom de fichier est à nouveau activée, et peut-être également désactivée.
Par exemple, si l' -f
extension de nom de fichier était déjà désactivée lors de la $-
première sauvegarde de la valeur de , sa valeur enregistrée serait (au moins) :
f
Et donc quand il set
est exécuté à nouveau, cela revient à:
set +f -f
Ce qui vous ramène là où vous avez commencé.
set +o
Répertoriera toutes set
les options du shell de table (voir la réponse de Jason pour le shopt
pouvoir - est-ce un mot? - options) sous une forme qui est sûre pour la rentrée du shell. De cette façon, vous pouvez également faire:
state=$(set +o)
set -some -crazy -options
eval "$state"
Pour enregistrer, modifier et restaurer respectivement l'état des options du shell.
Pour gérer les shopt
ions et set
les options de table en une seule fois:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Vous pouvez également appeler set
sans aucun argument pour ajouter une liste de toutes les variables actuellement définies du shell - également citées pour la réentrée dans le shell. Et vous pouvez - en bash - en plus ajouter la commande typeset -fp
pour inclure également toutes les fonctions shell actuellement déclarées. Vous pouvez tout regrouper et eval
quand vous êtes prêt. Vous pouvez même appeler alias
sans arguments pour plus de la même chose. Cela ... pourrait le couvrir, cependant. Je suppose qu'il y a "$@"
- que vous devez d'abord mettre dans un bash
tableau, je suppose, avant de le faire set
.
Non, il y en a aussi trap
. Celui-ci est un peu drôle. Habituellement:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... affichera simplement ceci est mon sous - shell parce que le sous-shell est un nouveau processus et obtient son propre ensemble de trap
s - et n'hérite donc pas de trap
s mais de ceux que son parent a explicitement ignorés - (comme trap '' INT
) .
Toutefois:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
se comporte spécialement lorsqu'il s'agit de la première et seule commande exécutée dans un sous-shell de substitution de commandes en ce sens qu'il reproduira une liste des shell parents actuellement définis traps
dans un format qui est cité pour une rentrée en toute sécurité dans le shell. Et donc vous pouvez faire le save_traps
, puis set
sans arguments - et tout le reste déjà mentionné - pour obtenir à peu près un verrou sur tous les états du shell. Cependant, vous souhaiterez peut-être ajouter export -p
et readonly -p
restaurer explicitement les attributs var var du shell d'origine.
Bref, ça suffit.
set +o
etshopt
? (quant àshopt
pouvoir être un mot,settable
est utilisé dans la page de manuel, donc çashoptable
marche pour moi)