Comando bash sin bloqueo


11

Digamos que tengo un script bash con lo siguiente:

#!/bin/sh
gedit
rm *.temp

Cuando lo ejecuto usando sh ./test.sh, geditaparece una ventana emergente, pero la rmparte no se ejecuta hasta después de cerrar gedit.

Quiero que el script continúe ejecutándose incluso si geditno está cerrado; como si geditno estuviera bloqueando la ejecución de bash.

El ejemplo que di es solo un ejemplo (poner el rmprimero no funcionará en una situación real).

Respuestas:


25

El término que está buscando se llama "fondo" de un trabajo. Cuando ejecuta un comando en su shell o en un script, puede agregar un indicador al final para enviarlo al fondo y continuar ejecutando nuevos comandos o el resto del script. En la mayoría de los proyectiles sh, incluido , este es el &personaje.

#!/bin/sh
gedit &
rm ./*.temp

De esa forma, el shell no espera la finalización de geditambos rmy geditse ejecutará simultáneamente.

El término "bloqueo" generalmente tiene que ver con flujos de entrada / salida, a menudo a archivos o un dispositivo. También se usa en lenguajes compilados en algo similar al sentido que usaste, pero en bash y scripts de shell similares, la terminología (¡y la función!) Es bastante diferente.


¡gracias! eso explica por qué solo estaba obteniendo quince e ingresando resultados en google: D
— Plante el

Mi impresión es que Plante quiere influir en un script desde afuera, realizar cada operación en segundo plano, no reescribir el script.
— usuario desconocido el

@usuario: Me tomó un par de lecturas incluso adivinar lo que quería. Tal vez podría comentar la pregunta para aclararla.
— Caleb

Eso es exactamente lo que necesitaba, gracias de nuevo. funciona muy bien hasta ahora!
— Plante
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.