Comment utiliser la commande yes sous Linux

La commande yes semble trop simple pour être d’une utilité pratique, mais dans ce tutoriel, nous allons vous montrer son application et comment profiter de sa positivité refoulée sous Linux et macOS.

La commande oui

La commande yes est l’une des commandes les plus simples de Linux et d’autres systèmes d’exploitation de type Unix comme macOS. Et par simple, nous entendons simple dans son utilisation et sa mise en œuvre initiale. Le code source de la version originale – publié dans System 7 Unix et créé par Ken Thompson– équivaut à un simple six lignes de code.

Mais ne l’écrivez pas pour être une simple petite commande. Il peut être utilisé de manière intéressante et utile.

Que fait oui?

Utilisée sans aucun paramètre de ligne de commande, la commande yes se comporte comme si vous tapiez «y» et appuyez sur Entrée, encore et encore (et encore et encore). Très rapidement. Et il continuera à le faire jusqu’à ce que vous appuyiez sur Ctrl + C pour l’interrompre.

yes

sortie de oui dans une fenêtre de terminal

En fait, yes peut être utilisé pour générer à plusieurs reprises le message de votre choix. Tapez simplement oui, un espace, la chaîne que vous souhaitez utiliser, puis appuyez sur Entrée. Ceci est souvent utilisé pour que yes génère un flux de sortie de chaînes «yes» ou «no».

yes yes

sortie de oui oui dans une fenêtre de terminal

yes anything you like

sortie de oui avec une ligne de texte dans une fenêtre de terminal

Mais à quoi cela sert-il?

La sortie de yes peut être redirigée vers d’autres programmes ou scripts.

Cela vous semble-t-il familier? Vous démarrez un long processus en cours d’exécution et vous vous en éloignez, le laissant s’exécuter. Lorsque vous revenez sur votre ordinateur, le processus n’est pas du tout terminé. En votre absence, il vous a posé une question et attend une réponse «oui» ou «non».

  Nettoyer Google Music supprime toutes les cartes de suggestions de Google Music [Firefox]

Si vous savez à l’avance que toutes vos réponses seront positives («oui» ou «y») ou négatives («non» ou «n»), vous pouvez utiliser oui pour fournir ces réponses pour vous. Votre long processus se terminera ensuite sans surveillance avec oui en fournissant les réponses à toutes les questions posées par le processus.

Utilisation de yes avec des scripts

Regardez le script shell Bash suivant. (Nous devons imaginer que cela fait partie d’un script beaucoup plus large qui prendra un temps considérable à s’exécuter.)

#!/bin/bash

# ...
# in the middle of some long script
# obtain a response from the user
# ...

echo "Are you happy to proceed? [y,n]"
read input

# did we get an input value?
if [ "$input" == "" ]; then

   echo "Nothing was entered by the user"

# was it a y or a yes?
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then

   echo "Positive response: $input"

# treat anything else as a negative response
else

   echo "negative response: $input"

fi

Ce script pose une question et attend une réponse. Le flux logique dans le script est décidé par l’entrée de l’utilisateur.

Un «oui» ou un «y» indique une réponse positive.
Toute autre entrée est considérée comme une réponse négative.
Appuyer sur Entrée sans texte d’entrée ne fait rien.

Pour tester cela, copiez le script dans un fichier et enregistrez-le sous le nom long_script.sh. Utilisez chmod pour le rendre exécutable.

chmod +x long_script.sh

Exécutez le script avec la commande suivante. Essayez de fournir «oui», «y» et tout autre élément comme entrée, y compris en appuyant sur Entrée sans texte d’entrée.

./long_script.sh

sortie de long_script.sh dans une fenêtre de terminal

Pour obtenir oui afin de fournir notre réponse à la question du script, dirigez la sortie de oui vers le script.

yes | ./long_script.sh

piping yes dans long_script.sh dans une fenêtre de terminal

Certains scripts sont plus rigides dans leurs exigences et n’acceptent que le mot complet «oui» comme une réponse positive. Vous pouvez fournir «oui» comme paramètre à yes, comme suit:

yes yes | ./long_script.sh

piping oui oui dans long_script.sh dans une fenêtre de terminal

Ne dites pas oui sans y réfléchir

Vous devez être certain que l’entrée que vous allez alimenter dans le script ou le programme va certainement vous donner le résultat que vous attendez. Pour pouvoir prendre cette décision, vous devez connaître les questions et quelles devraient être vos réponses.

  Comment installer l'application Nokia Camera sur n'importe quel téléphone Android

La logique du script, de la commande ou du programme peut ne pas correspondre à vos attentes. Dans notre exemple de script, la question aurait pu être «Voulez-vous arrêter? [y,n]. » Si tel avait été le cas, une réponse négative aurait permis au script de se poursuivre.

Vous devez être familiarisé avec le script, la commande ou le programme avant d’y ajouter allègrement oui.

Utilisation de yes avec des commandes

À ses débuts, yes serait utilisé avec d’autres commandes Linux. Depuis lors, la plupart de ces autres commandes Linux ont leur propre mode de fonctionnement sans interaction humaine. oui n’est plus nécessaire pour y parvenir.

Prenons comme exemple le gestionnaire de paquets Ubuntu apt-get. Pour installer une application sans avoir à appuyer sur «y» à mi-chemin de l’installation, yes aurait été utilisé comme suit:

yes | sudo apt-get install fortune-mod

piping yes dans apt-get dans une fenêtre de terminal

Le même résultat peut être obtenu en utilisant l’option -y (assume yes) dans apt-get:

sudo apt-get -y install fortune-mod

en utilisant apt-get avec l'option assume yes dans une fenêtre de terminal

Vous verrez qu’apt-get n’a même pas demandé son habituel «Voulez-vous continuer? [Y/n]»Question. Il supposait simplement que la réponse serait «oui».

Sur les autres distributions Linux, la situation est la même. Sur Fedora, vous auriez utilisé ce type de commande de gestionnaire de paquets à un moment donné:

yes | yum install fortune-mod

Le gestionnaire de paquets dnf a remplacé yum et dnf a sa propre option -y (supposer oui).

dnf -y install fortune-mod

La même chose s’applique à cp, fsck et rm. Ces commandes ont chacune leurs propres options -f (forcer) ou -y (supposer oui).

Alors, semble-t-il que oui a été relégué à travailler uniquement avec des scripts? Pas assez. Il y a encore quelques astuces dans le vieux chien.

Quelques autres trucs oui

Vous pouvez utiliser yes avec une séquence de chiffres générée par seq pour contrôler une boucle d’actions répétées.

Cette ligne unique renvoie les chiffres générés dans la fenêtre du terminal, puis appelle le mode veille pendant une seconde.

  Comment améliorer la qualité d'une image numérisée

Au lieu de simplement renvoyer les chiffres à la fenêtre du terminal, vous pouvez appeler une autre commande ou un autre script. Cette commande ou ce script n’a même pas besoin d’utiliser les chiffres, et ils ne sont là que pour démarrer chaque cycle de la boucle.

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

oui one-liner régulant une boucle dans la fenêtre du terminal

Parfois, il est utile d’avoir un gros fichier à tester. Peut-être voulez-vous vous entraîner à utiliser la commande zip, ou vous voulez avoir un fichier volumineux pour tester les téléchargements FTP avec.

Vous pouvez rapidement générer des fichiers volumineux avec yes. Tout ce que vous avez à faire est de lui donner une longue chaîne de texte avec laquelle travailler et de rediriger la sortie dans un fichier. Ne fais pas d’erreur; ces fichiers se développeront rapidement. Soyez prêt à appuyer sur Ctrl + C en quelques secondes.

yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

générer des fichiers de test avec yes ia terminal window

Le fichier généré ici a pris environ cinq secondes sur la machine de test utilisée pour rechercher cet article. Ls rapporte que sa taille est de 557 Mo, et wc nous dit qu’il contient 12,4 millions de lignes.

Nous pouvons limiter la taille du fichier en incluant head dans notre chaîne de commande. Nous lui indiquons le nombre de lignes à inclure dans le fichier. Le -50 signifie que la tête ne laissera que 50 lignes jusqu’au fichier test.txt.

yes long line of meaningless text for file padding | head -50 > test.txt

utiliser head pour limiter la taille d'un fichier dans une fenêtre de terminal

Dès qu’il y a 50 lignes dans le fichier test.txt, le processus s’arrête. Vous n’avez pas besoin d’utiliser Ctrl + C. Il s’arrête gracieusement de sa propre initiative.

wc signale qu’il y a exactement 50 lignes dans le fichier, 400 mots et sa taille est de 2350 octets.

Même si elle est toujours utile pour alimenter des réponses dans des scripts de longue durée (et quelques autres astuces), la commande yes ne fera pas partie de votre boîte à outils quotidienne de commandes. Mais lorsque vous en avez besoin, vous constaterez que c’est la simplicité même – et le tout en six lignes de code d’or.