Bien sûr, le langage bash
est le même qu’on l’utilise dans des scripts,
comme présenté ici
ou sur la ligne de commande,
mais on ne s’y prend pas forcement exactement pareil.
Voilà donc quelques lignes de commande utiles.
Compter les lignes
Une mauvaise idée est de faire :
$ find . -name "*.c" | wc -l
car ça compte le nombre de fichiers et non le nombre de lignes des fichiers.
Une première idée est de faire :
$ find . -name "*.c" | wc -l --files0-from=-
Mais si le nombre de fichier est trop grand, cela donne Nom de fichier trop long
.
Pour que ça marche, il suffit d’utiliser l’option -print0
de find
:
$ find . -name "*.c" -print0 | wc -l --files0-from=-
Une solution plus élégante est de faire :
$ wc -l $(find . -name "*.c")
car en plus, on profite du joli formatage de wc
.
Définir une variable temporaire
Il est souvent utile d’ajouter une variable dans l’environnement avant d’appeler une commande.
Le manuel de bash
dit :
The environment for any simple command or function may be augmented temporarily by prefixing it with parameter assignments, as described above in PARAMETERS. These assignment statements affect only the environment seen by that command.
Ce qui laisse penser qu’on peut faire :
$ NAME=toto ma_cmd
mais ça ne fonctionne pas, ou en tout cas pas toujours. Par exemple:
$ NAME=toto echo "Bonjour $NAME"
ne fonctionne pas car ici, $NAME
est évalué avant d'être affecté.
Pour que ça fonctionne, il faut forcer l’affectation avant l'évaluation, en faisant par exemple :
$ (NAME=toto && echo "Bonjour $NAME")
ou :
$ (NAME=toto ; echo "Bonjour $NAME")
Attention, les parenthèses sont utiles pour ne pas modifier l’environnement courant. Pour plus d’explication, voir sur StackOverflow.
Dans d’autres cas problématiques (mais je ne me souviens plus du contexte), il faut parfois utiliser :
$ env NAME=toto ma_cmd
Voir aussi :
- Disque dur externe
- Bash : modèle de script
- Garder son PATH dans une commande sudo
- Bash : redirection
- Bash : pid d'un processus en arrière plan
- Vérifier l'intégrité d'un fichier téléchargé
- Bash : sélection de fichiers par extension
- Bash : variables et redirections
- Bash : faire un menu
- Problème de boot
- Zenity : des fenêtres pour les scripts
- Bash : mesurer le temps
- (X)ubuntu : mise à niveau vers la 14.04
- Xubuntu: connexion automatique
- Apt-get et autres pour la gestion de paquets Debian
- Linux : ramassis d'astuces diverses
- Bash : pour écrire des scripts
- Filtrage de texte : sed, awk, etc.
- Les couleurs dans un terminal
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit