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, nos referimos a 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) nuevamente. Muy rápidamente. Y seguirá haciéndolo hasta que presione Ctrl + C para interrumpirlo.

De hecho, yesse puede utilizar para generar repetidamente cualquier mensaje que elija. Simplemente escriba yes, un 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í

si lo que quieras

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

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" == ""]; entonces

   echo "El usuario no ingresó nada"

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

   echo "Respuesta positiva: $ input"

# tratar cualquier otra cosa como una respuesta negativa
demá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

Para poder yesdar nuestra respuesta a la pregunta del script, canalice la salida desde yesel script.

si | ./long_script.sh

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

No digas que sí sin pensarlo bien

Debe estar seguro de que la información 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.

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 presionar "y" a mitad de la instalación, yesse habría utilizado de la siguiente manera:

si | sudo apt-get install fortune-mod

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

sudo apt-get -y instalar fortune-mod

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 yumdnftiene su propia -yopción (suponga que sí).

dnf -y  instalar  fortune-mod

Lo mismo se aplica a cpfsckrmCada 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.

Este de una sola línea hace eco de los dígitos generados en la ventana de la terminal y luego pide sleepun segundo.

En lugar de simplemente hacer eco de los dígitos en la ventana de la terminal, puede llamar a otro comando o secuencia de comandos. 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. Quizás 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 yesTodo 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 contiene 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 el relleno de archivos | head -50> test.txt

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