MagPI 3 Page 12

De Le French MagPi
Aller à : Navigation, rechercher

Une méthode plus complexe consiste à utiliser la sortie d'une commande comme paramètre pour une autre. Cela peut prendre un certain temps pour s'y habituer. Commençons avec un exemple très simple...


Pour afficher le nombre de fichiers présents dans le répertoire courant, utilisez la commande

ls | wc -l

Pour l'afficher à l'écran, vous pouvez employer celle-ci

echo `ls | wc -l`

Le symbole ` (voir en haut de la page 13) permet d'utiliser le résultat de la commande ls comme paramètre de la commande echo. Nous pouvons élaborer une commande plus compliquée, sans qu'elle n'ait l'air très différente

echo "Il y a `ls | wc -l` fichiers dans ce répertoire"

Pour prouver l'utilité de cette méthode, voici une commande qui recherche tous les programmes C contenant le mot "buffer". Cela peut se révéler très utile si vous voulez savoir dans quels fichiers se trouve une variable ou une fonction particulière.

grep -l "buffer" `sudo find / -name *.c`

Parfois, le résultat de la commande sera trop important pour tenir sur un seul écran. Par exemple, affichons une liste des tous les programmes Python (*.py) du système...

sudo find / -name *.py

Vous constatez que ces programmes sont en très grand nombre, il n'y a aucune chance de pouvoir tous les lire sur un seul écran. Heureusement, il existe un moyen d'arrêter la sortie pour vous donner la possibilité de lire le texte. Il faut envoyer le résultat à la commande "more" par l'intermédiaire d'un tube.


Comment gérer les erreurs
Dans le texte ci-dessus, nous gérons les erreurs de la commande find grâce à la commande sudo. Pour être franc, c'est de la triche. C'est une pure coïncidence si sudo nous met à l'abri des erreurs de la commande find, cette solution ne marchera pas avec toutes les commandes que vous pourriez essayer.


Pour savoir comment dissimuler les erreurs, vous devez maîtrisez un peu plus le fonctionnement des commandes Linux. Chacune dispose d'une entrée, une sortie et des erreurs. Normalement, la sortie et les erreurs sont affichées ensemble, mais elles peuvent être dissociées si vous le souhaitez. Plus tôt, nous avons vu que le symbole ">" redirige le résultat vers un fichier. Si vous voulez un plus grand contrôle, vous pouvez employer le symbole "1>" pour envoyer la sortie dans un fichier, et le symbole "2>" pour envoyer les erreurs dans un autre fichier.Essayons les commandes suivantes comme exemple...

find / -name *.c 1> maliste 2> meserreurs
cat maliste
cat meserreurs

Comme vous pouvez le voir, toutes les erreurs sont envoyées dans le fichier nommé meserreurs. Cela pose un léger inconvénient car nous devons supprimer ce fichier plus tard (avec la commande "rm meserreurs"). Par chance, il existe un fichier conçu spécialement pour les sorties que l'on ne veut pas, son nom est /dev/null. En gros, il s'agit d'un trou sans fond dans lequel vous pouvez jeter tout ce que vous n'aimez pas.


Donc, en écrivant "2> /dev/null", nous serons sûrs d'éliminer les erreurs et nous n'aurons plus besoin de la commande sudo. L'exemple précédent pour compter tous les programmes C ressemble maintenant à

find / -name *.c 2> /dev/null | wc -l

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Boîte à outils