Comment utiliser la commande yes sous Linux



La commande yes peut paraître rudimentaire, mais ce guide pratique vous révélera son potentiel caché et comment l’exploiter sous Linux et macOS.

L’utilité de la commande oui

La commande yes est parmi les commandes les plus élémentaires de Linux et des systèmes Unix tels que macOS. Sa simplicité se manifeste tant dans son usage que dans sa conception. Le code source de la version originale, apparue dans System 7 Unix et conçue par Ken Thompson, tient en seulement six lignes.

Ne vous laissez cependant pas tromper par cette simplicité apparente. Elle recèle des applications pratiques et intéressantes.

Fonctionnement de la commande yes

Sans aucun argument, la commande yes agit comme si vous tapiez « y » suivi de la touche Entrée, de manière continue et à grande vitesse. Cette action se répète jusqu’à ce que vous l’interrompiez avec la combinaison de touches Ctrl+C.

yes

La commande yes peut aussi générer une suite de messages personnalisés. Il suffit d’écrire yes, un espace, puis le texte souhaité avant de valider avec Entrée. On l’utilise fréquemment pour produire une série de « oui » ou de « non ».

yes oui

yes texte de votre choix

Utilité concrète de yes

Les sorties de la commande yes peuvent être envoyées vers d’autres applications ou scripts.

N’avez-vous jamais lancé un long processus et, à votre retour, constaté qu’il était bloqué en attente d’une réponse « oui » ou « non »?

Si vous savez à l’avance que toutes les réponses attendues seront affirmatives (« oui » ou « y ») ou négatives (« non » ou « n »), vous pouvez utiliser yes pour répondre à votre place. Votre processus se déroulera ainsi sans interruption, yes se chargeant de toutes les interactions nécessaires.

Intégration de yes dans les scripts

Voici un script Bash, exemple d’une section d’un code plus vaste. Il demande une confirmation à l’utilisateur:

#!/bin/bash

# ...
# au milieu d'un long script
# demande de réponse à l'utilisateur
# ...

echo "Confirmez-vous l'action? [y,n]"
read input

# Vérifie si une réponse a été saisie
if [ "$input" == "" ]; then

   echo "Aucune entrée utilisateur détectée"

# Vérifie si l'entrée est "y" ou "oui"
elif [[ "$input" == "y" ]] || [[ "$input" == "oui" ]]; then

   echo "Réponse positive : $input"

# Toute autre réponse est considérée comme négative
else

   echo "Réponse négative : $input"

fi

Ce script sollicite une entrée de l’utilisateur pour poursuivre. La logique du script est conditionnée par cette entrée.

Une entrée « oui » ou « y » est interprétée comme positive. Tout autre réponse est considérée comme négative. Une validation par Entrée sans saisie de texte est ignorée.

Pour tester ce script, copiez-le dans un fichier nommé long_script.sh, et rendez-le exécutable avec la commande chmod +x long_script.sh.

chmod +x long_script.sh

Exécutez-le avec la commande suivante, en testant différentes entrées, comme « oui », « y » ou en validant simplement avec Entrée.

./long_script.sh

Pour que yes réponde à la question du script, envoyez sa sortie vers ce dernier.

yes | ./long_script.sh

Certains scripts exigent le mot « oui » complet pour valider une réponse positive. Dans ce cas, il faut l’indiquer comme argument à yes:

yes oui | ./long_script.sh

Précautions d’emploi avec la commande yes

Assurez-vous que l’entrée envoyée au script ou programme produise l’effet désiré. Pour cela, il est crucial de connaître le détail des questions et les réponses appropriées. La logique d’un script peut ne pas correspondre à vos attentes. Par exemple, la question aurait pu être « Voulez-vous arrêter? [y,n] », et dans ce cas, une réponse négative aurait permis au script de se poursuivre. Il est donc essentiel de bien comprendre le fonctionnement du script avant de l’utiliser avec yes.

Utilisation de yes avec d’autres commandes

Autrefois, yes était souvent utilisée avec d’autres commandes Linux. Cependant, la plupart de ces commandes possèdent désormais des options qui permettent de fonctionner sans interaction humaine. yes n’est donc plus indispensable.

Prenons l’exemple du gestionnaire de paquets Ubuntu apt-get. Pour installer une application sans avoir à confirmer en tapant « y », on utilisait yes:

yes | sudo apt-get install fortune-mod

On obtient le même résultat avec l’option -y (qui signifie « assume yes ») d’apt-get:

sudo apt-get -y install fortune-mod

Vous remarquerez qu’apt-get n’a pas affiché sa question habituelle « Voulez-vous continuer? [Y/n] ». Il a directement considéré la réponse comme positive.

Le principe est similaire sur les autres distributions Linux. Sur Fedora, on utilisait un jour ce type de commande pour le gestionnaire de paquets:

yes | yum install fortune-mod

Le gestionnaire de paquets dnf, qui a remplacé yum, possède également sa propre option -y.

dnf -y install fortune-mod

C’est également le cas des commandes cp, fsck et rm qui possèdent des options -f (forcer) ou -y (assumer oui).

Est-ce que yes est donc uniquement utile pour les scripts ? Pas tout à fait. Il reste quelques tours dans son sac.

Astuces supplémentaires avec la commande yes

Vous pouvez utiliser yes avec la commande seq, qui génère une suite de nombres, pour contrôler une boucle d’actions répétées.

Cette commande affiche les nombres générés dans le terminal et marque une pause d’une seconde à chaque itération.

Au lieu d’afficher ces nombres, on peut aussi utiliser une autre commande ou un script. Ces éléments n’ont pas besoin d’utiliser les nombres; ils servent simplement à initier chaque cycle de la boucle.

yes "$(seq 1 20)" | while read chiffre; do echo $chiffre; sleep 1; done

Il peut aussi être pratique de générer rapidement un fichier volumineux. Par exemple, pour vous entraîner à utiliser la commande zip ou pour tester le chargement via FTP.

yes permet de créer rapidement de gros fichiers. Il suffit de lui fournir un long texte et d’envoyer la sortie vers un fichier. Attention, ces fichiers peuvent grandir très vite. Soyez prêt à utiliser Ctrl+C en quelques secondes.

yes longue ligne de texte pour remplir le fichier > test.txt
ls -lh test.txt
wc test.txt

Le fichier généré ici a pris environ cinq secondes sur la machine utilisée pour les tests. La commande ls indique une taille de 557 Mo, et wc nous informe qu’il contient 12,4 millions de lignes.

On peut limiter la taille du fichier avec head, qui permet de définir le nombre de lignes à inclure. Avec -50, head ne laissera que 50 lignes dans le fichier test.txt.

yes longue ligne de texte pour remplir le fichier | head -50 > test.txt

Dès que le fichier test.txt atteint 50 lignes, le processus s’arrête. Il n’est pas nécessaire d’utiliser Ctrl+C, le processus s’arrête de lui-même.

wc indique qu’il y a bien 50 lignes dans le fichier, 400 mots et une taille de 2350 octets.

Bien qu’elle reste utile pour les scripts (et quelques autres astuces), la commande yes ne fera pas partie de votre routine quotidienne. Néanmoins, lorsque vous en aurez besoin, vous apprécierez sa simplicité, le tout en seulement six lignes de code.