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

Plante
fuente

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.

Caleb
fuente
¡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