Huit options Bash peu connues

Certaines options Bash sont bien connues et souvent utilisées. Par exemple, beaucoup de gens écrivent au début du script

définir -o xtrace

pour le débogage,

set -o élevé

sortir par erreur ou

set -o jeu d'erreurs

pour quitter si la variable appelée n'est pas définie.

Mais il existe de nombreuses autres options. Parfois, ils sont décrits de manière trop confuse en manas, c'est pourquoi j'ai rassemblé ici quelques-uns des plus utiles, avec des explications.

Remarque : les Mac peuvent avoir une ancienne version de bash (3.x plutôt que 4.x) sur laquelle toutes ces options ne sont pas disponibles. Dans ce cas, voir ici ou ici.

set ou shopt?

Il existe deux manières de définir les options bash : à partir d'un script ou à partir de la ligne de commande. Vous pouvez utiliser les commandes intégrées set и shopt. Les deux modifient le comportement du shell, font à peu près la même chose (avec des arguments différents), mais diffèrent dans leur origine... Options set sont hérités ou empruntés aux paramètres d'autres shells, tandis que les paramètres shopt créé en bash.

Si vous souhaitez voir les options actuelles, exécutez :

$ set -o
$ shopt

Pour activer l'option dans 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 semblait erronée (un signe moins active l'option et un signe plus la désactive).

В shopt (plus logiques) les indicateurs sont utilisés pour activer et désactiver les options -s (ensemble) et -u (non défini):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Changer de répertoire

Il existe plusieurs options qui vous aident à travailler avec des répertoires.

1.cdspell

Avec ce paramètre, bash commencera à comprendre les fautes de frappe et vous amènera au dossier dont vous avez mal orthographié le nom.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

J'utilise cette option depuis de nombreuses années et très rarement (peut-être une fois par an) elle prend une décision très étrange. Mais les autres jours cdspell permet de gagner du temps, littéralement tous les jours.

2. autocd

Si vous n'êtes pas prêt à accepter l'inefficacité de plusieurs entrées cd, vous pouvez alors définir cette option pour vous déplacer vers le dossier X si la commande X n'existe pas.

$ shopt -s autocd
$ abcdefg
$ cd ..

Combiné avec la saisie semi-automatique, cela vous permet de passer rapidement d'un dossier à l'autre :

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

Ne nommez pas le dossier rm -rf * (oui, d'ailleurs, c'est possible).

3.direexpand

Il s'agit d'une option intéressante qui développe 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. vérifier les emplois

Cette option arrête la déconnexion de la session si des tâches sont encore en cours d'exécution en arrière-plan.

Au lieu de quitter, une liste des tâches inachevées 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 процесса  изменился

Superpouvoirs de substitution

5.globstar

Cette option vous donne des super pouvoirs de substitution ! Si vous saisissez :

$ shopt -s globstar
$ ls **

alors le shell affichera tous les répertoires et sous-répertoires de manière récursive.

En combinaison avec direxpand Vous pouvez rapidement visualiser tout ce qui se trouve plus bas dans la hiérarchie :

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Cette option active les fonctionnalités qui sont plus communément associées aux expressions régulières. Parfois, c'est 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 ! = afficher 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. histvérifier

Cela peut être un peu effrayant au début d'utiliser les commandes de lancement rapide de l'historique des abréviations !! и !$.

Option histverify vous permet de voir d'abord comment Bash interprète la commande avant qu'elle ne s'exécute réellement :

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Noclobber

Encore une fois, pour se protéger contre les accidents, à savoir l'écrasement d'un fichier déjà existant avec l'opérateur de redirection (>). Cela peut être un désastre si vous n'avez pas de sauvegarde.

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: habr.com

Ajouter un commentaire