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