Que fait oui $ (oui oui)?


23

yesJe me demandais à quoi pourrait servir la commande, je suis tombé sur ce commentaire et j'ai essayé d'exécuter

yes $(yes yes)

D'après ce que je comprends, cela devrait simplement imprimer une séquence infinie de yes, mais à la place, cela ne produit rien et plante mon terminal graphique après quelques secondes. (Si je l'exécute sur tty1, je vois l'invite de connexion après un certain temps.)

Que se passe-t-il ici?


2
Je ne suis pas un expert, mais il se peut que la première invocation essaie d'imprimer des temps infinis infinis. (ou l'argument peut être tout simplement trop long.)
strugee

5
@strugee La liste des arguments n'est jamais remplie, car elle yesne revient jamais.
Chris Down

@strugee Vous pouvez obtenir des "temps infinis infinis" en utilisant xargs: yes yes | xargs -P 0 yes(ou sans -P 0pour l'infini à un seul processus)
Kyle Strand

Réponses:


25

Cela devrait déjà suffire pour fonctionner

 echo $(yes yes)

L' $(...)exécute la commande interne jusqu'à ce qu'elle soit terminée et capture toute sa sortie. - Maintenant qu'il yess'exécute depuis longtemps et génère beaucoup de sortie, bash finira par manquer de mémoire et se bloquer.


6

Pour voir le message de l'erreur qui ferme votre shell, vous devez exécuter un sous-shell.

$ sh
$ kill -9 $$
Killed
$

$ sh
$ yes $(yes yes)
sh: xrealloc: cannot allocate 18446744071562067968 bytes
$

1
16 millions de gigaoctets, hein? Gordon Moore se cache dans un coin en train de dire "Eh bien ... je veux dire, pas encore tout à fait ..."
FeRD
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.