Cómo usar el comando yes en Linux

Fatmawati Achmad Zaenuri / Shutterstock.com

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 yescomando 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 escrito por Ken Thompson, asciende a apenas 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 yescomando 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.

si

salida de sí en una ventana de terminal

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

sí Sí

salida de sí sí en una ventana de terminal

si lo que quieras

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

Pero, ¿de qué sirve eso?

La salida de yesse 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 utilizarlas yespara proporcionar esas respuestas. Su largo proceso se ejecutará hasta su finalización sin supervisión y yesproporcionará las respuestas a cualquier pregunta que el proceso le haga.

Relacionado:  Cómo conectarse a un servidor SSH desde Windows, macOS o 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 tomará un tiempo considerable para ejecutarse).

#! / bin / bash

# ...
# en medio de un guión largo
# obtener una respuesta del usuario
# ...

echo "¿Estás contento de continuar? [s, n]"
leer entrada

# ¿obtuvimos un valor de entrada?
if ["$ input" == ""]; luego

   echo "El usuario no ingresó nada"

# ¿Fue un sí o un sí?
elif [["$ input" == "y"]] || [["$ input" == "yes"]]; luego

   echo "Respuesta positiva: $ input"

# tratar cualquier otra cosa como una respuesta negativa
más

   echo "respuesta negativa: $ 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. Úselo chmodpara 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 poder yesproporcionar nuestra respuesta a la pregunta del script, canalice la salida desde yesel script.

si | ./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 de la yessiguiente manera:

si si | ./long_script.sh

canalizando sí sí a 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? [s, n] «. Si ese hubiera sido el caso, una respuesta negativa habría permitido que el guión continuara.

Relacionado:  Cómo agregar un directorio a su $ PATH en Linux

Usted debe estar familiarizado con la secuencia de comandos, un comando o programa antes alegremente tubería yesen ella.

Usar yes con comandos

En su infancia, yesse 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. yesya no es necesario para lograrlo.

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

si | sudo apt-get install fortune-mod

canalizando yes en apt-get en una ventana de terminal

Se puede lograr el mismo resultado usando la -yopción (asumir sí) en apt-get:

sudo apt-get -y instalar fortune-mod

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

Verás que apt-getni siquiera preguntaron su habitual “¿Quieres continuar? [S / 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:

si | yum  instalar  fortune-mod

El dnfadministrador de paquetes ha reemplazado yumy dnftiene su propia -yopción (suponga que sí).

dnf -y  instalar  fortune-mod

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

Entonces, ¿parece que yesha quedado 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 utilizar yescon una secuencia de dígitos generada por seqpara controlar un bucle de acciones repetidas.

Esta línea simple hace eco de los dígitos generados en la ventana de la terminal y luego pide sleepun 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.

sí "$ (seq 1 20)" | mientras lee el dígito; hacer eco de dígitos; dormir 1; hecho

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 .

Relacionado:  Cómo (y por qué) cambiar su dirección MAC en Windows, Linux y Mac

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é listo para presionar Ctrl + C en unos segundos.

sí, una larga línea de texto sin sentido para el relleno de archivos> 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.  lsinforma que tiene un tamaño de 557 Mb y wcnos dice que tiene 12,4 millones de líneas.

Podemos limitar el tamaño del archivo incluyéndolo  headen nuestra cadena de comandos. Le decimos cuántas líneas incluir en el archivo. Los -50medios headpermitirán que solo 50 líneas pasen al test.txtarchivo.

sí, una larga línea de texto sin sentido para rellenar archivos | head -50> test.txt

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

Tan pronto como haya 50 líneas en el test.txtarchivo, 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 yescomando no formará parte de su juego 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.