El comando yes de #GNU

Veamos qué puede hacer y cómo podemos utilizar el comando yes de las herramientas coreutils del sistema GNU

Las herramientas coreutils del sistema GNU, son las herramientas básicas de nuestro sistema a la hora de gestionarlo desde la línea de comandos.

En esta ocasión echaremos al comando yes, que puede parecer «una frikada» un poco inútil, pero ¿podremos utilizarlo para algo útil? Seguro que sí…

Este artículo es una adaptación de este artículo en inglés escrito por Anoop.

El comando yes por sí solo, al ejecutarlo sin más en una consola, imprime una serie interminable de letras y. Y eso es todo lo que hace… Ejecuta en tu terminal:

yes

Para detener esa imparable secuencia de «y» utiliza la combinación de teclas Ctrl+c ¿Y eso qué sentido tiene?

Esta herramienta fue diseñada en principio para responder afirmativamente («y» o «yes») de manera automática a scripts o programas interactivos que pidieran una respuesta del usuario para confirmar una acción.

Pero desde hace tiempo esa funcionalidad quedó anticuada, ya que se han incorporado opciones que fuerzan (-f o –force) que se haga una acción sin necesidad de pedir una confirmación por parte del usuario.

Podemos hacer que el comando rm pregunte una confirmación antes de borrar unos archivos con la opción -i:

rm -i *.txt

Pero también podemos hacer que el comando yes conteste a todo que sí por nosotros:

yes | rm -i *.txt

Vale, este es un caso tonto sin mucho sentido, pero ¿ves cómo lo podríamos utilizar en otros casos?

Pero el comando yes hace algo más. Puede imprimir en la pantalla una secuencia interminable de la frase que le pases como comando. Ejecuta ahora:

yes hola mundo!!!

El comando imprime sin fin la cadena pasada y un salto de línea. De nuevo para detener esa secuencia interminable deberemos hacerlo con Ctrl+c

Casos de uso del comando yes

¿Y para qué podemos utilizar este comando? En principio no parece que tenga mucha utilidad, pero puede servirnos como herramienta en algunos casos.

Podemos generar archivos de texto grandes para utilizarlos en otras tareas. Por ejemplo:

yes 1234 qwer asdf zxcv > archivo.txt

Puede crearnos en pocos segundos un archivo llamado archivo.txt de varios Megas o Gigas, hasta que pulsemos Ctrl-c para detener el proceso.

Pero quizás queremos generar un archivo de un número determinado de líneas, por ejemplo 1000:

yes 1234 qwert asdf zxcv | head -1000 > archivo.txt

También podemos utilizar el comando yes para poner a prueba la CPU de nuestro equipo creando una tarea que haga que el sistema «se estrese» para comprobar que los ventiladores funcionan y todo el sistema responde a esta carga de trabajo.

Abre tu monitor del sistema (htop por ejemplo) y ejecuta:

yes > /dev/null

Verás que la carga de las CPU’s de tu equipo se ponen a trabajar al 100%.

También podemos utilizar el comando yes para comprobar si ciertos comando funcionan correctamente con una entrada tan extensa de comandos.


Como ves el comando es muy sencillo y seguro que respondió a una necesidad de los desarrolladores en aquellos primeros días de la creación del sistema GNU o Unix…

¿Utilizas en alguna ocasión el comando yes? ¿Lo utilizas de una forma distinta a las presentadas aquí? Comparte tus experiencias en los comentarios.

10 comentarios sobre “El comando yes de #GNU

  1. Lo desconocía por completo (al igual que más comandos seguramente). Es un comando al que le veo poca chicha (me parecieron más útiles date, alias).

    Ah, si escribes yes hola mundo!!! te salen duplicados en consola de la frase y con el yes ahí metido (pruébalo con 3 exclamaciones y después con 2, ya verás).
    Para que funcione bien ha de ser yes hola mundo! (con sólo 1 exclamación).

    Saludos

    PD: ¿se le puede dar a enter para separar texto sin que te envie el mensaje o has de pasar por un editor de texto para copiar y pegar?

    1. Vaya, no sabía lo de las exclamaciones…
      Tiene poca chicha, y quizás no lo vayamos a usar nunca… pero me pareció curioso saber de dónde viene y algún uso,,,,

      Sobre la PD ni idea….

      Saludos!!

      1. Offtopic. Es una prueba de darle al enter.

        Pues sí. Puedo darle al enter sin que me envie el texto. 🙂

      2. Pero me sale al enviar todo junto cuando en la caja de respuesta tenía sus espacios.

      3. Cuando veo de nuevo el mensaje pasado un tiempo (2h en este caso) me sale con sus espacios. :S

      4. Probando desde Chromium 92.0.4515.159 (openSUSE Build) (64 bits)

        Hago enter dejando una línea en blanco entre esta y la de la versión de Chromium. A ver que tal.

      5. Ahora desde Firefox 91.0.1.

        En chromium he de recargar la página para ver la línea en blanco. Si no escribo otro mensaje es que en Firefox pasa lo mismo.

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.