El comando sí
El yes
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 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 yes
comando 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.
sí
De hecho, yes
se 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 yes
para 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 yes
se 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 yes
para proporcionarle esas respuestas. Su largo proceso se ejecutará hasta su finalización sin supervisión y yes
proporcionará 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 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
Para poder yes
dar nuestra respuesta a la pregunta del script, canalice la salida desde yes
el 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 yes
siguiente 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 yes
en ella.
Usar 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 tienen 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 mitad de la instalación, yes
se habría utilizado de la siguiente manera:
si | sudo apt-get install fortune-mod
Se puede lograr el mismo resultado usando la -y
opción (asumir sí) en apt-get
:
sudo apt-get -y instalar fortune-mod
Verás que apt-get
ni 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 dnf
administrador de paquetes ha reemplazado yum
y dnf
tiene su propia -y
opción (suponga que sí).
dnf -y instalar fortune-mod
Lo mismo se aplica a cp
, fsck
y rm
. Cada uno de estos comandos tiene sus propias opciones -f
(forzar) o -y
(asumir sí).
Entonces, ¿parece que yes
ha 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 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 de la terminal y luego pide sleep
un 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
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 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
El archivo generado aquí tardó unos cinco segundos en la máquina de prueba utilizada para investigar este artículo. ls
informa que tiene un tamaño de 557 Mb y wc
nos dice que contiene 12,4 millones de líneas.
Podemos limitar el tamaño del archivo incluyéndolo head
en nuestra cadena de comandos. Le decimos cuántas líneas incluir en el archivo. Los -50
medios head
permitirán que solo 50 líneas pasen al test.txt
archivo.
sí, una larga línea de texto sin sentido para el relleno de archivos | 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. 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 yes
comando 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.
0 Comentarios