¿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.