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' -fabord 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 +fexpansion du nom de fichier est à nouveau activée, et peut-être également désactivée.
Par exemple, si l' -fextension 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 setest exécuté à nouveau, cela revient à:
set +f -f
Ce qui vous ramène là où vous avez commencé.
set +o
Répertoriera toutes setles options du shell de table (voir la réponse de Jason pour le shoptpouvoir - 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 shoptions et setles 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 -fppour inclure également toutes les fonctions shell actuellement déclarées. Vous pouvez tout regrouper et evalquand vous êtes prêt. Vous pouvez même appeler aliassans 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 bashtableau, 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 traps - et n'hérite donc pas de traps mais de ceux que son parent a explicitement ignorés - (comme trap '' INT) .
Toutefois:
trap 'echo this is my trap' 0
save_traps=$(trap)
trapse 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 trapsdans 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 -pet readonly -prestaurer explicitement les attributs var var du shell d'origine.
Bref, ça suffit.
set +oetshopt? (quant àshoptpouvoir être un mot,settableest utilisé dans la page de manuel, donc çashoptablemarche pour moi)