User Tools

Site Tools


informatique:linux:bash

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
informatique:linux:bash [2020/11/12 15:00] – [Rappels et substitutions] pteuinformatique:linux:bash [2021/04/05 16:24] – [Liens/Ressources] pteu
Line 85: Line 85:
 Les options de bash peuvent se modifier au lancement sous forme de paramètre (''bash -e'' par ex.) ou dans un script via le mot-clé ''set''. Elles permettent de tuner le shell en modifiant son comportement par défaut. Les options de bash peuvent se modifier au lancement sous forme de paramètre (''bash -e'' par ex.) ou dans un script via le mot-clé ''set''. Elles permettent de tuner le shell en modifiant son comportement par défaut.
  
 +====-e====
 +
 +bash se termine lorsqu'il voit un code de retour en erreur (différent de 0). Pratique pour éviter que des erreurs non prévues dans un script ne provoquent des bêtises.
 +Cependant ça ne marche pas correctement avec certaines commandes comme grep, qui retourne 1 s'il ne matche pas (ce qui n'est certainement pas une erreur qui vaut le coup que l'on stoppe le script). Alors, comme indiqué dans [[https://stackoverflow.com/questions/9952177/whats-the-meaning-of-the-parameter-e-for-bash-shell-command-line/9952249|ce thread de stackoverflow]] :
 +    * soit on gère l'erreur avec un ''grep TRUC machin.txt || :'' : on gère l'erreur pour que bash ne la "voit" pas. Cependant ce n'est pas idéal car on masque tous les codes d'erreur (pas que 1).
 +    * soit, plus compliqué mais plus pertinent, on créé une fonction "grep" dans notre script pour surcharger la commande système grep, qui va gérer ses codes de retour pour filtrer les erreurs 1 mais pas toutes les autres, qu'elle renverra à bash pour qu'il se termine en affichant le code d'erreur de grep.
 +<code bash>
 +#!/bin/bash -e
 +function grep () {
 +    local exit_code
 +    command grep "$@" || exit_code=$?
 +    return $(( exit_code == 1 ? 0 : exit_code ))
 +}
 +grep PATTERN FILE     # won't kill script if no matches are found
 +</code>
 +Rappel : ''command'' permet de lancer la commande qui suit ("grep" ici) parmi les commandes internes et le contenu du $PATH uniquement, afin que notre fonction ne devienne pas récursive !
  
 =====Debugger un script===== =====Debugger un script=====
Line 341: Line 357:
 printf "%0.s${C}" $(seq 1 ${N}) printf "%0.s${C}" $(seq 1 ${N})
 </code> </code>
 +
 +
 +=====Liens/Ressources=====
 +
 +  * [[https://github.com/jlevy/the-art-of-command-line|The Art of Command Line]] (jlevy's GitHub)
informatique/linux/bash.txt · Last modified: 2023/01/09 10:52 by pteu