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.
Table des matières
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
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
yes anything you like
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».
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
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
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
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.
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
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
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.
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
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
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
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.