L'intepreter Bash a-t-il des options, c'est-à-dire.
Lignes 22-23 de Bash's Man Page:
OPTIONS All of the single-character Shell options documented in the description of the set builtin command can be used as options when the Shell is invoked. In addition, bash interprets the following options when it is invoked: -c ... -i ... -l ... -r ...
J'ai utilisé quelques motifs de recherche dans la page Bash Man, comme:
/^\s*set
/list
Est-il possible d'imprimer une liste de ces paramètres appliqués à la coque actuelle?
printf %s\\n "$-"
Liste des 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 "$@"
D'abord Désactiver la coque -f
expansion d'ilename tout en enregistrant simultanément une valeur pour $-
- si tout - dans $1
. Ensuite, aucun globe ne se produit et le dernier +f
_ ilename expansion est à nouveau activé et éventuellement également désactivé.
Par exemple, si -f
ilename expansion était déjà désactivé lorsque la valeur pour $-
a été sauvegardée, puis sa valeur enregistrée serait (au moins):
f
Et alors quand set
est à nouveau exécuté, cela fonctionne à:
set +f -f
Ce qui vous met simplement votre retour là où vous avez commencé.
set +o
Listera tous les options de shell set
[~ var _] (voir Réponse de Jason pour le shopt
able - est-ce un mot? - Options) sous une forme qui est sûre pour la refoulement de la coque. De cette façon, vous pouvez également faire:
state=$(set +o)
set -some -crazy -options
eval "$state"
Pour enregistrer, changer et restaurer l'état des options de shell, respectivement.
Pour gérer les shopt
ions et set
table options en une fois:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Vous pouvez également appeler set
sans Tout argument pour ajouter une liste de toutes les variables actuellement définies de la coque - également citée pour la refoulement à la coquille. Et vous pouvez - en bash - ajoutez en outre la commande typeset -fp
Pour inclure également toutes les fonctions de shell actuellement déclarées. Vous pouvez tout grouper ensemble et eval
lorsque vous êtes prêt. Vous pouvez même appeler alias
sans argument 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 faire set
.
Nope, il y a aussi trap
. Celui-ci est un peu drôle. D'habitude:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... Je vais simplement imprimer Ceci est mon sous-vase Parce que le sous-groupe est un nouveau processus et obtient son propre ensemble de trap
s - et donc n'hérite pas d'hériter de trap
s mais ceux que son parent a explicitement ignoré - (comme trap '' INT
).
Toutefois:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
se comporte spécialement quand il est le premier and seulement Commande exécutée dans un sous-riche de substitution de commande en ce sens qu'il reproduira une liste de la coque mère actuellement définie traps
Dans un format qui est cité pour une refoulement de sécurité à la coquille. Et afin que vous puissiez faire le save_traps
, alorsset
sans arguments - et tout le reste déjà mentionné - pour obtenir à peu près une serrure de tous État shell. Vous voudrez peut-être explicitement ajouter export -p
_ et readonly -p
pour restaurer des attributs d'origine de Shell Var, cependant.
Quoi qu'il en soit, ça suffit.
De la page man
:
boutique
... sans options, ou avec l'option -p, une liste de toutes les options réglantes est affichée, avec une indication de chaque définition ou non.
shopt | grep on
imprimera une liste de toutes les options activées.
Options?: Il y a trois groupes d'options à bash.
Les options sont lues ou définies par la commande set
.
[.____] (Utilisez cette commande pour le manuel: LESS=+/'set \[--abefhkmnptuvxBCEHPT\]' man bash
)
[.____] Toutes les options d'une lettre: abefhkmnptuvxBCEHPT
Aussi les options (qui n'ont pas d'équivalent de lettre):
set -o emacs
set -o history
set -o ignoreeof
set -o interactive-comments
set -o pipefail
set -o posix
set -o vi
Les options sont lues ou définies par la commande shopt
.
(Lisez le manuel avec cette commande: LESS=+/'shopt \[-pqsu\]' man bash'
)
[.____] La liste est assez longue mais facile à imprimer, utilisez:
$ shopt -p
ou le similaire (mais pas égal):
$ shopt
Les options pouvant être définies sur l'invocation:
[.____] (commande pour le manuel: LESS=+/'^INVOCATION' man bash
)
Tous set
options:
bash -abefhkmnptuvxBCEHPT
Tous shopt
options
bash -O option
Quelques options qui ne sont significatives que lorsque vous invoquez Bash:
bash -lirsDc
Et aussi (options longues):
bash --debugger --help --init-file file --rcfile file --login \
--noediting --noprofile --norc --posix --restricted \
--verbose --version
Tous set
Options d'une lettre et -ri
sont imprimés avec $-
.
-i Interactive
Only read with `$-` (if it contains an `i`).
-r Restricted
Also read with `shopt -p restricted_Shell
Par exemple:
$ echo 'echo $0 $-' | bash -abefhikmprtuvxBCEHPT -lri
Appeler Bash en tant que shell de connexion est seulement signalé avec Shopt:
-l Login
read with `shopt -p login_Shell`
Ainsi:
$ echo 'shopt -p login_Shell' | bash -abefhikmprtuvxBCEHPT -lri
shopt -s login_Shell
L'option -n
ne peut pas être testé par aucun code, car cela signifie: n'exécutez aucun code.
Le meilleur outil permettant de répertorie les options de la coquille exécutant, soit celle définie avec set
_ ou celles définies avec shopt
est le même shopt
. Pour répertorier les options de définition:
shopt -o
Qui agit exactement comme set -o
. Utilisation shopt -po
Pour obtenir le même résultat que set +o
.
Pour énumérer les options shopt:
shopt -p
Dont vous pouvez choisir d'imprimer soit celui de celles définis shopt -ps
ou non défini shopt -pu
Obtenir toutes les options. Autant que possible autant d'options longues et de certaines (-sDc
) sur l'invocation ne peut pas être imprimé:
$ echo $-; shopt -p ; shopt -po
Pour les stocker dans une variable:
$ storeoptions="$(echo "set -$-"; shopt -p ; shopt -po)"
Et la variable pourrait être utilisée pour définir toutes les options:
$ eval "$storeoptions"
Pour répertorier toutes les options:
set -o
Pour inspecter une option spécifique:
set -o | grep <OPTION>
Prenez l'option verbose
comme exemple:
$ set -o | grep verbose
verbose off
Pour inspecter une option spécifique:
if shopt -q <OPTION>
then echo '<OPTION> is set'
fi