Cómo usar el comando yes en Linux

Cómo usar el comando yes en Linux

Fatmawati Achmad Zaenuri / Shutterstock.com

El comando yes parece demasiado simple para ser útil, pero en este tutorial, le mostraremos su aplicación y cómo aprovechar su positividad reprimida en Linux y macOS.

El comando si

los yes El comando 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 e implementación inicial. El código fuente de la versión original, publicado en System 7 Unix y escrito por Ken Thompson– representa solo uno seis líneas de código.

Pero no lo descarte porque es solo un pedido pequeño. Se puede utilizar 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 escribieras «y» y presionas Enter, una y otra vez (y una y otra vez). Muy rápidamente. Y seguirá haciendo esto hasta que presione Ctrl + C para interrumpirlo.

yes

En realidad, yes se puede utilizar para generar repetidamente cualquier mensaje que elija. Sólo tipo yes, un espacio, la cadena que desea usar y luego presione Entrar. Esto se usa a menudo para causar yes para generar un flujo de salida de cadenas «sí» o «no».

yes yes

yes anything you like

¿Pero para qué es eso?

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

¿Esto te suena familiar? Empiezas un proceso de larga duración y te alejas, dejándolo funcionar. Cuando regresa a su computadora, el proceso no está completo en absoluto. En su ausencia, le hizo una pregunta y espera 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 utilizar yes para proporcionarle esas respuestas. Su largo proceso terminará desatendido con yes proporcionar respuestas a todas las preguntas planteadas por el proceso.

Use sí con scripts

Mire el siguiente script de shell de Bash. (Tenemos que imaginar que esto es parte de un script mucho más grande que tardará una cantidad considerable de tiempo en 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 en el script lo decide el usuario.

  • Un «sí» o una «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. Usar 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

Obtener yes para proporcionar nuestra respuesta a la pregunta del guión, dirija la salida de yes al escenario.

yes | ./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 para yes, como sigue:

yes yes | ./long_script.sh

No digas que si sin pensar

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

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

Debe estar familiarizado con el script, comando o programa antes de iniciar alegremente yes en ello.

Usar sí con comandos

En sus inicios, yes se usaría con otros comandos de Linux. Desde entonces, la mayoría de estos otros comandos de Linux han tenido su propia forma de trabajar sin interacción humana. yes ya no es necesario para lograrlo.

Toma el administrador de paquetes de Ubuntu apt-get por 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 siguiente manera:

yes | sudo apt-get install fortune-mod

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

sudo apt-get -y install fortune-mod

Verás eso apt-get ni siquiera le preguntó a 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 del administrador de paquetes antes:

yes | yum install fortune-mod

los dnf administrador de paquetes 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 guiones? No demasiado. Todavía hay algunos trucos en el perro viejo.

Algunos otros consejos si

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

Este one-liner devuelve los dígitos generados a la ventana del terminal, luego llama sleep por un segundo.

En lugar de simplemente devolver los números a la ventana de la terminal, puede llamar a otro comando o secuencia de comandos. Este comando o secuencia de comandos ni siquiera necesita usar los números, y solo están ahí para comenzar cada ciclo del ciclo.

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

sí, una sola línea que regula un bucle en la ventana del terminal

A veces ayuda tener un archivo grande para probar. Tal vez desee practicar el uso del comando zip, o desea tener un archivo grande disponible para probar descargas FTP.

Puede generar archivos grandes rápidamente con yes. Todo lo que tiene que hacer es darle una larga cadena de texto para trabajar y redirigir la salida a un archivo. No cometa errores; estos archivos crecerán rápidamente. Esté listo para presionar Ctrl + C en segundos.

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

generar archivos de prueba con la ventana de terminal yes ia

El archivo generado aquí tomó aproximadamente cinco segundos en la máquina de prueba utilizada para encontrar este elemento. ls informa que tiene un tamaño de 557 MB, y wc díganos que contiene 12,4 millones de filas.

Podemos limitar el tamaño del archivo incluyendo head en nuestra cadena de comandos. Le decimos el número de líneas a incluir en el archivo. los -50 formas head solo permitirá que 50 líneas pasen al test.txt archivar.

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

use head 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 proceso se detendrá. No es necesario utilizar Ctrl + C. Él amablemente se detiene por su propia voluntad.

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

Si bien sigue siendo útil para alimentar respuestas en scripts de larga duración (y algunos otros trucos), el yes comando no será parte de su kit de herramientas de comando diario. Pero cuando lo necesite, encontrará su simplicidad en sí misma, y ​​todo en seis líneas de código dorado.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas