13 liens privés
Make Linux Script Portable With #!/usr/bin/env As a Shebang - nixCraft · Liens en vrac de sebsauvage
TL;DR:
Ne faites pas :
#!/bin/bash
Faites :
#!/usr/bin/env bash
La commande sleep a comme objectif d'attendre un temps donné.
La commande wait permet d'attendre la fin d'un ou plusieurs processus en arrière-plan.
La commande timeout exécute une commande et la termine si elle dépasse une durée spécifiée. C'est utile pour éviter que des processus ne s'exécutent indéfiniment.
find Music/ -name *.mp3 -exec ma_commande {} \;
→ applique ma_commande sur les fichiers trouvés par find.
- Le
&
en fin de ligne pour lancer en arrière-plan - Si on a oublié le
&
, on peut faire un[Ctrl]+[Z]
- Après un
[Ctrl]+[Z]
on peut lancer unbg
pour lancer en background - On peut utiliser le
fg
pour ramener en foreground (avant-plan) le dernier processus (ou bien indiquer le PID correspond). - Enfin
nohup
(en début de ligne cette fois-ci), s'affranchit du processus du terminal depuis lequel il est lancé pour fonctionner en arrière-plan (ie, on peut fermer la fenêtre).
Pour décompresser plusieurs fichiers *.tar.gz
en une seule passe.
for f in *gz; do tar -xzf "$f"; done
Comment déterminer sur quel shell on tourne ? Quelques commandes bien choisies :
echo $0
ps -p $$
pstree $$
cat /proc/$$/cmdline
J'ai régulièrement le besoin d'écrire des scripts shell un peu évolués. Il y a quelques mois, j'ai commencé à travailler sur un modèle que je met régulièrement à jour. Aujourd'hui, j'ai travaillé sur la couche pour gérer les logs et c'est pourquoi j'écris cet article.
Ce modèle contient les fonctions
usage
ethelp
pour décrire le fonctionnement du programme. La fonctionon_interrupt
permet de gérer le signalSIGINT
quand le programme est interrompu.La fonction
main
est la fonction qui contient le code principal du script. Elle contient la gestion des paramètres passés au script. Par défaut, plusieurs y sont déjà intégrés :-l
pour définir le niveau de log désiré et-h
pour afficher l'aide.Enfin, il y a la fonction
log
pour afficher des messages de debug avec différents niveaux de criticité. Cela permet de générer des messages qui seront affichés ou pas selon les besoins. Les messages sont colorés selon le niveau de criticité et ils sont redirigés versstderr
. Il est également possible d'ajouter la date.Le code source est disponible sur Gitnet et comme toujours, vous pouvez en faire ce que vous voulez !
En conclusion, le développement de ce modèle de script shell a été un projet passionnant et fructueux. En l'enrichissant régulièrement, j'ai pu créer une base solide pour gérer efficacement les fonctionnalités essentielles d'un script.
Un mémo pour les équivalences entre les commandes Bash (Linux) et Dos, Powershell (Windows).
Un article, excellent et très intéressant, expliquant comment bien gérer l'historique bash.
Un exemple de script bash gérant des messages de types : normal, debug et error. Il inclus quelques options sympas.
Un signal est une sorte de notification envoyée à un processus lorsqu’un événement particulier a eu lieu. Plus concrètement, lorsqu’un programme ne répond pas dans votre terminal et que vous faites Ctrl+C, le système envoi le signal SIGINT au processus en cours lui signifiant d’interrompre séance tenante toute action.
Il est possible de piéger (trap
) les signaux envoyés à un scipt bash pour en modifier le comportement. Par exemple, fermer une connexion ssh.