Certaines options de Bash sont bien connues et souvent utilisées. Par exemple, beaucoup écrivent au début d'un script
définir -o xtrace
pour le débogage,
set -o errexit
sortir par erreur ou
set -o errunset
pour quitter si la variable appelée n'est pas définie.
Mais il existe de nombreuses autres options. Parfois, ils sont trop confus décrits dans l'homme, j'ai donc rassemblé ici certains des plus utiles, avec une explication.
Remarque: Mac peut avoir une ancienne version de bash (3.x, pas 4.x), où toutes ces options ne sont pas disponibles. Dans ce cas, regardez ici ou ici .set
ou shopt
?
Il existe deux façons de définir les paramètres bash: à partir d'un script ou de la ligne de commande. Vous pouvez utiliser les
shopt
set
et
shopt
. Les deux modifient le comportement du shell, font à peu près la même chose (avec des arguments différents) et diffèrent dans leur
origine .
set
paramètres
shopt
sont hérités ou empruntés aux paramètres d'autres shells, tandis
shopt
paramètres
shopt
créés dans bash.
Si vous souhaitez consulter les options actuelles, exécutez:
$ set -o $ shopt
Pour activer une option dans l'
set
, une syntaxe longue ou courte est utilisée:
$ set -o errunset $ set -e
L'effet est le même.
Pour désactiver l'option, vous devez mettre un plus au lieu d'un moins:
$ set +e
Pendant longtemps, je n'ai pas pu me souvenir de cette syntaxe, car la logique semble être erronée (moins active l'option et plus la désactive).
shopt
utilise les
shopt
(plus logiques)
-s
(set) et
-u
(unset) pour activer et désactiver les options:
$ shopt -s cdspell
Modifications du répertoire
Il existe plusieurs options qui vous aident à travailler avec les répertoires.
1. cdspell
Avec ce paramètre, bash commencera à comprendre les fautes de frappe et vous transférera vers un dossier dont vous avez tapé le nom avec une erreur.
$ shopt -s cdspell $ mkdir abcdefg $ cd abcdeg abcdefg $ cd ..
J'ai utilisé cette option pendant de nombreuses années et très rarement (peut-être une fois par an), cela rend une décision très étrange. Mais les autres jours,
cdspell
gagner du temps, littéralement tous les jours.
2. autocd
Si vous n'êtes pas prêt à supporter l'inefficacité des entrées répétées de
cd
, vous pouvez définir cette option pour passer au dossier X si la commande X n'existe pas.
$ shopt -s autocd $ abcdefg $ cd ..
En combinaison avec la saisie semi-automatique, cela vous permet de passer rapidement aux dossiers:
$ ./abc[TAB][RETURN] cd -- ./abcdefg
Ne
rm -rf *
simplement pas
rm -rf *
dossier
rm -rf *
(oui, au fait, c'est possible).
3. direxpand
Il s'agit d'une option intéressante qui étend les variables d'environnement en appuyant sur Tab:
$ shopt -s direxpand $ ./[TAB]
Sortie propre
4. checkjobs
Cette option arrête la sortie de la session si les travaux sont toujours en cours d'exécution en arrière-plan.
Au lieu de quitter, une liste des tâches incomplètes s'affiche. Si vous souhaitez toujours quitter, entrez à nouveau
exit
.
$ shopt -s checkjobs $ echo $$ 68125
Capacités de substitution
5. globstar
Cette option vous donne des capacités de substitution supranormales! Si vous entrez:
$ shopt -s globstar $ ls **
alors le shell affichera récursivement tous les répertoires et sous-répertoires.
En combinaison avec
direxpand
vous pouvez rapidement voir tout ce qui suit dans la hiérarchie:
$ shopt -s direxpand $ ls **[TAB][TAB] Display all 2033 possibilities? (y or n)
6.extglob
Cette option active les fonctions qui sont le plus souvent associées aux expressions régulières. C'est parfois très utile:
$ shopt -s extglob $ touch afile bfile cfile $ ls afile bfile cfile $ ls ?(a*|b*) afile bfile $ ls !(a*|b*) cfile
Ici, les motifs sont placés entre parenthèses et séparés par une barre verticale. Voici les opérateurs disponibles:
? = correspond à zéro ou une occurrence des modèles donnés
! = montre tout ce qui ne correspond pas aux modèles donnés
* = zéro ou plusieurs occurrences
+ = une ou plusieurs occurrences
@ = exactement une occurrence
Protection contre les accidents
7. histverify
Au début, il peut être un peu effrayant d'utiliser les commandes de démarrage rapide de l'historique des abréviations
!!
et
!$
.
L'option
histverify
permet de voir d'abord comment Bash interprète la commande avant qu'elle ne démarre réellement:
$ shopt -s histverify $ echo !$
8. Noclobber
Encore une fois, pour se protéger contre les accidents, notamment en écrasant un fichier qui existe déjà avec l'opérateur de redirection (
>
). Cela peut être un désastre si vous n'avez pas de sauvegarde.
L'option
set -
interdit un tel écrasement. Si nécessaire, vous pouvez contourner la protection à l'aide de l'opérateur
>|
:
$ touch afile $ set -C $ echo something > afile -bash: afile: cannot overwrite existing file $ echo something >| afile $