Cómo usar el comando yes en Linux

Contenidos

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í

los yes command es uno de los comandos más simples en Linux y otros sistemas operativos similares a Unix como macOS. Y por simple, nos referimos a simple en su uso y su implementación inicial. El código fuente de la versión original, hecho público 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 usar de formas interesantes y útiles.

¿Qué hace el sí?

Usado sin ningún parámetro de línea de comando, el yes El comando 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

En realidad, yes se puede usar para generar repetidamente cualquier mensaje que elija. Simplemente escriba yes, un espacio, la cadena que desea utilizar y después presione Enter. Esto se utiliza a menudo para causar yes para generar un flujo de salida de cadenas «sí» o «no».

yes yes

yes anything you like

Pero, ¿de qué sirve eso?

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

¿Te suena familiar? Comienzas un largo procedimiento en ejecución y te alejas, dejándolo funcionar. Cuando regresa a su computadora, el procedimiento 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 yes para proporcionarle esas respuestas. Su largo procedimiento se ejecutará hasta su finalización sin supervisión con yes proporcionando las respuestas a las preguntas del procedimiento.

Utilizar yes con scripts

Mire el siguiente script de shell de 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 guión 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. Utilizar 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

Llegar yes para proporcionar nuestra respuesta a la pregunta del script, canalice la salida de yes al guión.

yes | ./long_script.sh

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

yes yes | ./long_script.sh

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

usted debe estar familiarizado con el script, comando o programa antes de canalizar alegremente yes en ello.

Utilizar 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 disponen su propia forma de ejecutarse sin interacción humana. yes 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, yes se habría utilizado de la próxima manera:

yes | sudo apt-get install fortune-mod

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

sudo apt-get -y install fortune-mod

Verás eso apt-get ni siquiera preguntó su usual “¿Deseas continuar? [Y/n]» pregunta. Simplemente asumió que la solución sería «sí».

En otras distribuciones de Linux, la situación es la misma. En Fedora, habría utilizado este tipo de comando de administrador de paquetes al mismo tiempo:

yes | yum install fortune-mod

los dnf el administrador de paquetes ha reemplazado yum y dnf tiene su propio -y (suponga que sí) opción.

dnf -y install fortune-mod

Lo mismo se aplica a cp, fsck, y rm. Cada uno de estos comandos tiene su propio -f (fuerza) o -y (suponga que sí) opciones.

Entonces parece que yes ha sido relegado a trabajar solo con scripts? No exactamente. Aún hay algunos trucos más en el perro viejo.

Algunos trucos más sí

Puedes utilizar yes con una secuencia de dígitos generada por seq para controlar un bucle de acciones repetidas.

Este de una sola línea hace eco de los dígitos generados en la ventana del terminal y después llama sleep por un segundo.

En lugar de simplemente enviar los dígitos a la ventana de la terminal, puede llamar a otro comando o script. Ese comando o secuencia de comandos ni siquiera necesita utilizar 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 de FTP.

Puede generar rápidamente archivos grandes con yes. 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 post. ls informa que tiene un tamaño de 557 Mb, y wc díganos que contiene 12,4 millones de líneas.

Podemos limitar el tamaño del archivo incluyendo head en nuestra cadena de comandos. Le decimos cuántas líneas incluir en el archivo. los -50 medio head dejará solo 50 líneas a través del test.txt expediente.

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 test.txt archivo, el procedimiento se detendrá. No es necesario usar 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.


Aún cuando sigue siendo útil para introducir respuestas en scripts de larga ejecución (y algunos otros trucos), el yes comando no va a ser parte de su conjunto 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.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.