Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
informatique:linux:bash [2016/10/14 21:50] – [Historique des commandes] création pteu | informatique:linux:bash [2020/10/30 22:01] – Afficher n fois un caractère pteu |
---|
* ''ctrl+alt+backspace'' ferme la session graphique | * ''ctrl+alt+backspace'' ferme la session graphique |
* ''ctrl+alt+suppr'' la pluspart du temps, sert à rebooter | * ''ctrl+alt+suppr'' la pluspart du temps, sert à rebooter |
| * ''ctrl+r'' //reverse-i-search// : recherche d'une commande précédemment saisie ; à nouveau ''ctrl+r'' permet de faire défiler les résultats en cas de réponses multiples ; ''ctrl+s'' permet de revenir au résultat précédent. NB : certain terminaux utilisent déjà la séquence ''Ctrl+S'' ; pour la désactiver, insérer ''stty -xion'' dans votre ''.bash_profile'' ou ''.bashrc''. |
| |
* ''alt+u'' et ''alt+l'' : passe, respectivement, en majuscules (Uppercase) et minuscules (Lowercase) le texte suivant le curseur | * ''alt+u'' et ''alt+l'' : passe, respectivement, en majuscules (Uppercase) et minuscules (Lowercase) le texte suivant le curseur |
* ''esc+@'' pour complèter les //hostnames// | * ''esc+@'' pour complèter les //hostnames// |
* ''esc+$'' pour complèter les variables | * ''esc+$'' pour complèter les variables |
* ''ctrl+r'' //reverse search// : recherche d'une commande précédemment saisie ; ''ctrl+R'' permet de faire défiler en cas de réponses multiples | |
* ''!motif'' permet de lancer la dernière commande saisie commançant par //motif// | * ''!motif'' permet de lancer la dernière commande saisie commançant par //motif// |
* ''!!'' lancer la dernière commande | * ''!!'' lancer la dernière commande |
=====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 : |
| |
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. | 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. |
| |
| |
| ====Afficher n fois un caractère==== |
| |
| Afficher $N fois le caractère $C : |
| <code bash> |
| N=10 |
| C=# |
| printf "%0.s${C}" $(seq 1 ${N}) |
| </code> |