14 liens privés
En bash, pour rediriger la sortie dans un fichier, on utilise le symbole >... Ajouter set -o noclobber
dans .bashrc empêchera > d'écraser un fichier existant lors d'une commande tapée à la main. Pour y arriver, il faudra utiliser >| pour forcer.
2>&1 - Fusionner erreurs et sortie normale
&1 dit à bash "le 1 c'est un file descriptor, pas un fichier qui s'appelle littéralement 1". Du coup stderr (2) est redirigé vers le même endroit que stdout (1), ou plutôt vers là où stdout pointe au moment où bash évalue la ligne.
Attention à l'ordre ! Bash lit les redirections de gauche à droite.
> output.log 2>&1 -> stdout pointe vers le fichier, puis stderr suit... tout va dans le fichier.
2>&1 > output.log -> stderr copie stdout qui pointe ENCORE vers le terminal, puis stdout est redirigé vers le fichier. Résultat, les erreurs restent dans votre terminal.
Et &> fait la même chose en plus court : commande &> output.log. C'est super pratique, mais spécifique à bash / zsh.
Commande pour réduire une image à 10% de sa taille initiale :
convert source.jpg -resize 10% cible.jpg
Pour utiliser ses propres dotfiles (.bashrc, .vimrc, etc.) locaux sur les serveurs distants, sans avoir à les y stocker ni mettre à jour un par un.
Une interface graphique pour générer des lignes de commandes bash.
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 unbgpour lancer en background - On peut utiliser le
fgpour 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"; doneComment déterminer sur quel shell on tourne ? Quelques commandes bien choisies :
echo $0ps -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
usageethelppour décrire le fonctionnement du programme. La fonctionon_interruptpermet de gérer le signalSIGINTquand le programme est interrompu.La fonction
mainest 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 :-lpour définir le niveau de log désiré et-hpour afficher l'aide.Enfin, il y a la fonction
logpour 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.