¿Qué hace yes $ (yes yes)?


23

Preguntándome qué uso yespodría tener el comando, me topé con este comentario e intenté ejecutar

yes $(yes yes)

Por lo que entiendo, esto simplemente debería imprimir una secuencia infinita de yes, pero en su lugar no genera nada y bloquea mi terminal gráfica después de unos segundos. (Si lo ejecuto en tty1, veo el mensaje de inicio de sesión después de un tiempo).

¿Que está sucediendo aquí?


2
No soy un experto, pero podría ser que la primera invocación está tratando de imprimir infinito infinitas veces. (o el argumento puede ser simplemente demasiado largo).
Strugee

55
@strugee La lista de argumentos nunca se llena, porque yesnunca regresa.
Chris Down

@strugee Puedes obtener "infinito infinito" usando xargs: yes yes | xargs -P 0 yes(o sin -P 0infinito de un solo proceso)
Kyle Strand

Respuestas:


25

Ya debería ser suficiente para correr

 echo $(yes yes)

El $(...)ejecuta el comando interno hasta que finaliza y captura toda su salida. - Ahora que se yesejecuta mucho tiempo y genera una gran cantidad de resultados, bash eventualmente se quedará sin memoria y se bloqueará.


6

Para ver el mensaje del error que cierra su shell, debe ejecutar un sub-shell.

$ sh
$ kill -9 $$
Killed
$

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

1
16 millones de gigabytes, ¿eh? Gordon Moore se esconde en un rincón ir, "Bueno ... quiero decir, no es sin embargo ..."
Ferd
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.