Huit options Bash peu connues

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 # <= on $ shopt -u cdspell # <= off 

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] #  ... $ /full/path/to/current_working_folder $ ~/[TAB] #  ... $ /full/path/to/home/folder $ $HOME/[TAB] #  ... $ /full/path/to/home/folder 

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 # <= ID    $ sleep 999 & $ exit There are running jobs. [1]+ Running sleep 999 & $ echo $$ 68125 # <= ID      $ exit There are running jobs. [1]+ Running sleep 999 & $ exit $ echo $$ $ 59316 # <=    ID   

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 !$ # <=   Enter    $ echo histverify # <=     , histverify # <=    

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 $ 

Source: https://habr.com/ru/post/fr452522/


All Articles