Cómo usar el comando yes en Linux

El comando yes parece demasiado simple para ser de uso práctico, pero en este tutorial, le mostraremos su aplicación y cómo beneficiarse de su positividad acumulada en Linux y macOS.

El comando sí

El comando yes es uno de los comandos más simples en Linux y otros sistemas operativos similares a Unix como macOS. Y por simple, queremos decir simple en su uso y su implementación inicial. El código fuente de la versión original, publicado en System 7 Unix y creado por Ken Thompson– asciende a un mero seis líneas de código.

Pero no lo descarte por ser un simple comando. Se puede utilizar de formas interesantes y útiles.

¿Qué hace el sí?

Usado sin ningún parámetro de línea de comando, el comando yes se comporta como si estuviera escribiendo “y” y presionando Enter, una y otra vez (y otra y otra vez). Muy rápidamente. Y seguirá haciéndolo hasta que presione Ctrl + C para interrumpirlo.

yes

salida de sí en una ventana de terminal

De hecho, sí se puede utilizar para generar repetidamente cualquier mensaje que elija. Simplemente escriba sí, un espacio, la cadena que desea usar y luego presione Entrar. Esto se usa a menudo para hacer que yes genere un flujo de salida de cadenas de «sí» o «no».

yes yes

salida de sí sí en una ventana de terminal

yes anything you like

salida de sí con una línea de texto en una ventana de terminal

Pero, ¿de qué sirve eso?

La salida de sí se puede canalizar a otros programas o scripts.

¿Te suena familiar? Comienzas un largo proceso en ejecución y te alejas, dejándolo funcionar. Cuando regresa a su computadora, el proceso no se ha completado en absoluto. En su ausencia, le ha hecho una pregunta y está sentado esperando una respuesta de «sí» o «no».

Si sabe de antemano que todas sus respuestas serán positivas («sí» o «y») o negativas («no» o «n»), puede usar sí para proporcionar esas respuestas. Luego, su largo proceso se ejecutará hasta su finalización sin supervisión, y el sí proporcionará las respuestas a cualquier pregunta que le haga el proceso.

  Cómo usar el comando tail en Linux

Usar yes con scripts

Mire el siguiente script de shell Bash. (Necesitamos imaginar que esto es parte de un script mucho más grande que llevará un tiempo considerable para ejecutarse).

#!/bin/bash

# ...
# in the middle of some long script
# obtain a response from the user
# ...

echo "Are you happy to proceed? [y,n]"
read input

# did we get an input value?
if [ "$input" == "" ]; then

   echo "Nothing was entered by the user"

# was it a y or a yes?
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then

   echo "Positive response: $input"

# treat anything else as a negative response
else

   echo "negative response: $input"

fi

Este script hace una pregunta y espera una respuesta. El flujo lógico dentro del script lo decide la entrada del usuario.

Un «sí» o «y» indica una respuesta positiva.
Cualquier otra entrada se considera una respuesta negativa.
Presionar Enter sin ingresar texto no hace nada.

Para probar esto, copie el script en un archivo y guárdelo como long_script.sh. Utilice chmod para hacerlo ejecutable.

chmod +x long_script.sh

Ejecute el script con el siguiente comando. Intente proporcionar «sí», «y» y cualquier otra cosa como entrada, incluida la presión de Intro sin introducir texto.

./long_script.sh

salida de long_script.sh en una ventana de terminal

Para obtener yes para proporcionar nuestra respuesta a la pregunta del script, canalice el resultado de yes al script.

yes | ./long_script.sh

canalizando yes en long_script.sh en una ventana de terminal

Algunos guiones son más rígidos en sus requisitos y solo aceptan la palabra completa “sí” como respuesta positiva. Puede proporcionar «sí» como parámetro para sí, de la siguiente manera:

yes yes | ./long_script.sh

canalizando sí sí en long_script.sh en una ventana de terminal

No digas que sí sin pensarlo bien

Debe estar seguro de que la entrada que va a introducir en el script o programa definitivamente le dará el resultado que espera. Para poder tomar esa decisión, debe conocer las preguntas y cuáles deben ser sus respuestas.

Es posible que la lógica del script, comando o programa no coincida con sus expectativas. En nuestro guión de ejemplo, la pregunta podría haber sido “¿Desea parar? [y,n]. » Si ese hubiera sido el caso, una respuesta negativa habría permitido que el guión continuara.

  Revisión del mejor antivirus para Linux en 2019

Debe estar familiarizado con el script, comando o programa antes de decir alegremente sí.

Usar yes con comandos

En su infancia, yes se usaría con otros comandos de Linux. Desde entonces, la mayoría de esos otros comandos de Linux tienen su propia forma de ejecutarse sin interacción humana. sí ya no es necesario para lograrlo.

Tomemos el administrador de paquetes de Ubuntu apt-get como ejemplo. Para instalar una aplicación sin tener que presionar «y» a la mitad de la instalación, sí se habría utilizado de la siguiente manera:

yes | sudo apt-get install fortune-mod

canalizando yes en apt-get en una ventana de terminal

El mismo resultado se puede lograr usando la opción -y (asume que sí) en apt-get:

sudo apt-get -y install fortune-mod

usando apt-get con la opción asumir sí en una ventana de terminal

Verás que apt-get ni siquiera preguntó su habitual “¿Quieres continuar? [Y/n]”Pregunta. Simplemente asumió que la respuesta sería «sí».

En otras distribuciones de Linux, la situación es la misma. En Fedora, habría usado este tipo de comando de administrador de paquetes a la vez:

yes | yum install fortune-mod

El administrador de paquetes dnf ha reemplazado a yum y dnf tiene su propia opción -y (se asume que sí).

dnf -y install fortune-mod

Lo mismo se aplica a cp, fsck y rm. Cada uno de estos comandos tiene sus propias opciones -f (forzar) o -y (asume que sí).

Entonces, ¿parece que sí se ha relegado a trabajar solo con guiones? No exactamente. Todavía hay algunos trucos más en el perro viejo.

Algunos trucos más sí

Puede usar yes con una secuencia de dígitos generada por seq para controlar un ciclo de acciones repetidas.

Esta frase única hace eco de los dígitos generados en la ventana de la terminal y luego llama a dormir durante un segundo.

En lugar de simplemente enviar los dígitos a la ventana del terminal, puede llamar a otro comando o script. Ese comando o secuencia de comandos ni siquiera necesita usar los dígitos, y solo están ahí para iniciar cada ciclo del ciclo.

yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done

sí one-liner que regula un bucle en la ventana del terminal

A veces es útil tener un archivo grande para probar. Tal vez desee practicar el uso del comando zip, o desea tener un archivo considerable para probar las cargas FTP.

  Cómo fusionar archivos PDF en Linux

Puede generar rápidamente archivos grandes con sí. Todo lo que necesita hacer es darle una larga cadena de texto para trabajar y redirigir la salida a un archivo. No cometer errores; esos archivos crecerán rápidamente. Esté preparado para presionar Ctrl + C en unos segundos.

yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

generando archivos de prueba con una ventana de terminal yes ia

El archivo generado aquí tardó unos cinco segundos en la máquina de prueba utilizada para investigar este artículo. ls informa que tiene un tamaño de 557 Mb y nos dice que contiene 12,4 millones de líneas.

Podemos limitar el tamaño del archivo al incluir head en nuestra cadena de comandos. Le decimos cuántas líneas incluir en el archivo. El encabezado -50 significa que solo 50 líneas pasarán al archivo test.txt.

yes long line of meaningless text for file padding | head -50 > test.txt

usando la cabeza para limitar el tamaño de un archivo en una ventana de terminal

Tan pronto como haya 50 líneas en el archivo test.txt, el proceso se detendrá. No es necesario utilizar Ctrl + C. Se detiene con gracia por su propia voluntad.

wc informa que hay exactamente 50 líneas en el archivo, 400 palabras y tiene un tamaño de 2350 bytes.

Aunque sigue siendo útil para introducir respuestas en scripts de larga ejecución (y algunos otros trucos), el comando yes no formará parte de su kit de herramientas diario de comandos. Pero cuando lo necesite, encontrará que es la simplicidad en sí misma, y ​​todo en seis líneas de código dorado.