Quel est le but de la commande "oui"?

40

Il existe une yescommande dans unix / linux qui imprime fondamentalement à l'infini ysur le stdout. Quel en est le but et comment est-il utile?

Cemre
la source
Quelques possibilités supplémentaires ici .
1
doublon possible de Quel est le point de la commande `yes`? ... (Signalant ceci en double car l'autre question plus récente est mieux posée et mieux répondue).
Aditya
Relating: unix.stackexchange.com/q/257297/117549
Jeff Schaller

Réponses:

42

yes peut être utilisé pour envoyer une réponse affirmative (ou négative; par exemple, yes n) à toute commande qui en demanderait autrement une, ce qui entraînerait l'exécution de la commande de manière non interactive.

La commande yes associée à la commande head peut être utilisée pour générer des fichiers volumineux à des fins de test.

Il peut également être utilisé pour tester la capacité d'un système à gérer des charges élevées, car l'utilisation de oui donne une utilisation de 100% du processeur, pour les systèmes dotés d'un seul processeur (pour un système multiprocesseur, un processus doit être exécuté pour chaque processeur). Ceci, par exemple, peut être utile pour déterminer si le système de refroidissement d'un système sera efficace lorsque le processeur tourne à 100%.

En 2006, la commande yes a reçu un peu de publicité pour être un moyen de tester si le MacBook d'un utilisateur est affecté du syndrome d'arrêt intermittent. En exécutant la commande yes deux fois via Terminal sous Mac OS X, les utilisateurs étaient en mesure de maximiser le processeur de leur ordinateur et de voir ainsi si la panne était liée à la chaleur.

via wikipedia: http://en.wikipedia.org/wiki/Yes_(Unix)

d3vin
la source
9
Pour des dégâts supplémentaires, essayezyes `yes yes`
sendmoreinfo
3
@sendmoreinfo Evil
Tobias Kienzler
Ohh, c'est un beau test de stress. juste essayé, puis couru à mon collègue pour demander une nouvelle vm xD
Toastgeraet
20

Cela pourrait être un avis controversé, mais à mon avis, il s’agit d’un vilain problème pour une mauvaise interface utilisateur dans les outils en ligne de commande .

Certains outils de ligne de commande posent des questions à l'utilisateur avec une invite et n'ont pas la possibilité de s'exécuter de manière non interactive. imaginez par exemple quelque chose comme

$ frobnicate *
frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
...

Comme la réponse à la question est tirée de l’entrée standard, une solution rapide à ce problème consiste à avoir une application qui affiche la chaîne en y\ncontinu, ce qui est exactement ce qui se yesproduit. Les pipes Unix peuvent être utilisées pour envoyer cette sortie en tant qu’entrée d’une commande donnée.

$ yes | frobnicate

L'un des problèmes de cette approche est qu'il yesest impossible de vérifier la question à laquelle elle répond:

frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
format device /dev/sda1? (y/n) y
frobnicate file c.txt? (y/n) y

Une meilleure solution, lorsqu'elle est disponible, consiste en une option spécifique à exécuter de manière non interactive, telle que rm -fou apt-get -y. Cela permet de coder un comportement plus sensible dans l'application.

Federico Poloni
la source
1
J'ai lu toutes les autres réponses. Je suis d' accord avec le vôtre complètement laid ... wrt solution si elle ne une utilisation valable pour tester la réponse de l' ordinateur à des charges élevées cpu.
Wildcard
6
Bien sûr, vous pouvez utiliser le logiciel propriétaire "Microsoft Windows" pour tester la réponse de l'ordinateur aux charges de processeur élevées, mais "oui" est en open source.
Wildcard
1
C'est pourtant l'une des plus belles réparations laides
Jezzamon
4

J'aime utiliser yeslorsque je décompresse plusieurs fichiers .zip contenant tous le même fichier du même nom et que l'on me demande quoi faire dans chaque cas (par exemple, un contrat de licence).

yes | for z in *.zip; do unzip "$z"; done 
Daloonik
la source
2

Je viens de découvrir une autre utilisation: aimer effacer un disque dur avec un motif différent de celui des zéros (comme:) dd if=/dev/zero of=/dev/sdd bs=1Met utiliser ' oui ' pour cela:

yes UUUUUUUUUUUUU > /dev/sdd

utilisateur1724834
la source
Attention cependant, il remplit le disque avec Us mais avec UUUUUUUUUUUUU\ns. Pour faire le plein U, il vous faut yes '' | tr '\n' U > /dev/sddoutr '\0' U < /dev/zero > /dev/sdd
Stéphane Chazelas il y a
1

Un collègue a utilisé cela d'une manière nouvelle pour entrer un mot de passe

yes password | passwd
frogstarr78
la source
passwddemandera d’abord l’ancien mot de passe, si l’utilisateur n’est pas un utilisateur root ou superutilisateur, et ne continuera pas tant que le mot de passe correct n’est pas entré. Donc, l'utilisateur est root ou passwordl'ancien mot de passe et rien n'est changé.
Michael Konietzka
@MichaelKonietzka en effet. Mais avec les conditions que vous avez mentionnées, c'est encore un cas d'utilisation utile.
Frogstarr78
3
Sauf que cela resterait dans l'histoire en texte clair. Crazeyyy.
Gleno
3
@Gleno in bash, vous pouvez le précéder d'un espace pour l'empêcher d'être enregistré (comme dans stackoverflow.com/q/640403/118153 )
Ieridayn
2
De plus, le mot de passe est divulgué à tous les utilisateurs locaux de la liste de processus ( psou topau bon moment).
Federico Poloni