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 [2016/09/09 06:53] – [Debugger un script] pteuinformatique:linux:bash [2019/04/16 15:08] – [Debugger un script] vérifier la syntaxe pteu
Line 69: Line 69:
 =====Debugger un script===== =====Debugger un script=====
  
-Pour débugger un script, ajouter dans le script :+Pour vérifier la syntaxe d'un script sans lancer : ''set -n'' (ou ''bash -n mon_script.sh''
 + 
 +Pour le débugger un script, ajouter dans le script :
   * ''set -x'' à partir de l'endroit où l'on veut tracer le script   * ''set -x'' à partir de l'endroit où l'on veut tracer le script
   * ''set +x'' à partir de l'endroit où l'on veut cesser de tracer le script    * ''set +x'' à partir de l'endroit où l'on veut cesser de tracer le script 
- +Autre méthode : lancer le script dans nouveau shell avec : ''bash -x script''
-Autre méthode : lancer le script dans nouveau shell avec : ''sh -x script''+
  
 Encore une autre méthode : à la première ligne du script, rajouter "-v" au **shebang**, par exemple : Encore une autre méthode : à la première ligne du script, rajouter "-v" au **shebang**, par exemple :
Line 216: Line 217:
 } }
 </code> </code>
 +
 +====Historique des commandes====
 +
 +La commande ''history'' permet d'afficher la liste des dernières commandes exécutées dans le terminal. Pour ajouter un timestamp (horodatage) on peut jouer sur les variables suivantes (à ajouter dans votre ''~/.bashrc'' ou à exporter) :
 +<code bash>
 +# ajouter l'horodatage
 +HISTTIMEFORMAT="%Y/%m/%d_%H:%M:%S "
 +# détermine le nombre de commandes max enregistrées
 +HISTSIZE=20000
 +# pour supprimer les doublons
 +HISTCONTROL=ignoredups
 +</code>
 +
 +Pour réafficher la dernière commande, on peut juste appuyer sur la touche de rappel de la dernière commande ("flèche haut") ; en appuyant une seconde fois on a l'avant-dernière, etc... OU sinon utiliser la commande ''!'' :
 +<code bash>
 +# relancer la dernière commande
 +!!
 +# relancer de la dernière commande commençant par "cd"
 +!cd
 +# relancer la 10ème commande de l'historique
 +!10
 +# relancer l'anvat-dernière commande
 +!-2
 +# relancer la dernière commande contenant la chaîne "home"
 +!?home
 +# relancer la dernière commande en remplaçant "toto" par "tata"
 +^toto^tata^
 +</code>
 +
 +Il existe un outil pour faire des recherches en "temps réel" dans l'historique ; pour l'invoquer on utilise ''Ctrl+R''. Le prompt est renommé en ''(reverse-i-search)`': '' et on peut saisir une chaîne de caractères ; l'outil va automatiquement rappeler la dernière commande saisie matchant cette chaîne.
 +
 +====PS1 avancé====
 +
 +On peut utiliser la variable ''PROMPT_COMMAND'' pour exécuter un script à chaque affichage du prompt, afin de l'adapter au contexte.
 +
 +Voici un exemple d'utilisation pour faire varier la couleur de l'utilisateur, la machine et afficher le code de retour de la dernière commande :
 +<code bash>
 +#
 +# à insérer dans le .bashrc ou .bash_profile
 +# penser à commenter la ligne "PS1=..."
 +#
 +RED="\[\033[1;31m\]"
 +GREEN="\[\033[0;32m\]"
 +YELLOW="\[\033[0;33m\]"
 +BLUE="\[\033[0;34m\]"
 +GRAY_BG="\[\033[0;30;47m\]"
 +OFF="\[\033[m\]"
 +TIME="\D{%d%m_%H%M%S}"
 +
 +function make_PS1 {
 +
 +# définition couleur "$" en fonction du code de retour précédente commande
 +EXITSTATUS="$?"
 +if [ "${EXITSTATUS}" -eq 0 ]
 +then
 +   RET_CMD=${GREEN}
 +else
 +   RET_CMD=${RED}
 +fi
 +
 +# définition couleur utilisateur
 +case $(id -u -n) in
 +   dude)
 +      USR_COL=${GREEN}
 +      ;;
 +   dude-adm)
 +      USR_COL=${BLUE}
 +      ;;
 +   root)
 +      USR_COL=${RED}
 +      ;;
 +   *)
 +      USR_COL=${YELLOW}
 +      ;;
 +esac
 +
 +# définition de la couleur de la machine
 +case $(hostname) in
 +   pc-perso)
 +      HOST_COL=${BLUE}
 +      ;;
 +   serveur-prod)
 +      HOST_COL=${RED}
 +      ;;
 +   *)
 +      HOST_COL=${YELLOW}
 +      ;;
 +esac
 +
 +PS1="${GRAY_BG}${TIME}${OFF} ${USR_COL}\u${OFF}@${HOST_COL}\h${OFF}:${YELLOW}\W${RET_CMD} \$${OFF} "
 +}
 +PROMPT_COMMAND=make_PS1
 +</code>
 +
 +Ce qui donne : ''1710_164245 dude@pc-perso:home $ '' avec des couleurs qui évoluent avec le contexte.
 +
informatique/linux/bash.txt · Last modified: 2023/01/09 10:52 by pteu