Puede separar varios comandos por ;
, para que se ejecuten secuencialmente, por ejemplo:
really_long_script.sh ; echo Finished
Si desea ejecutar el siguiente programa solo si el script terminó con el código de retorno 0 (lo que generalmente significa que se ha ejecutado correctamente), entonces:
really_long_script.sh && echo OK
Si desea lo contrario (es decir, continúe solo si el comando actual ha fallado), entonces:
really_long_script.sh || echo FAILED
Podría ejecutar su script en segundo plano (pero tenga cuidado, la salida de los scripts ( stdout
y stderr
) continuaría yendo a su terminal a menos que lo redirija a algún lugar), y luego wait
para ello:
really_long_script.sh &
dosomethingelse
wait; echo Finished
Si ya ha ejecutado el script, puede suspenderlo Ctrl-Z
y luego ejecutar algo como:
fg ; echo Finished
Donde fg
pone el proceso suspendido en primer plano ( bg
lo haría funcionar en segundo plano, más o menos como comenzó &
)
fg
devuelve el valor del trabajo que reanuda, puede usarlofg && echo Finished
si desea asegurarse de que el comando tenga éxito antes de ejecutar el otro comando.También puedes usar el control de trabajo de bash. Si empezaste
luego presione ctrl + z para suspenderlo:
para reiniciar el trabajo en segundo plano (como si lo hubiera iniciado
really_long_script.sh &
). Entonces puedes esperar este trabajo de fondo condonde N es la ID del trabajo (probablemente 1 si no ejecutó ningún otro trabajo en segundo plano) que también se muestra como se muestra
[1]
arriba.fuente
Si el proceso no se ejecuta en tty actual, intente esto:
fuente
watch
. Respuesta súper corta y uno aprende una nueva forma útil de usar el relojResulta que esto no es tan difícil: simplemente puede escribir el siguiente comando en la ventana mientras se ejecuta el existente, presionar enter y, cuando finalice el primero, el segundo comando se ejecutará automáticamente.
Supongo que hay formas más elegantes, pero esto parece funcionar.
Edición para agregar que si desea ejecutar una alerta después de que finalice el comando, puede crear estos alias en .bashrc, luego ejecutar
alert
mientras se está ejecutando:fuente
Hace un tiempo escribí un guión para esperar el final de otro proceso.
NOISE_CMD
podría ser algo asínotify-send ...
, dado queDISPLAY
está configurado correctamente.Sin ningún argumento, solo haga un poco de ruido de inmediato. Este comportamiento permite algo como esto por conveniencia (digamos que llama script a continuación
alarm.sh
):Por supuesto, puede hacer muchas cosas divertidas con un script de este tipo, como dejar que una instancia
alarm.sh
espere una instancia dealarm.sh
, que esté esperando algún otro comando. O ejecutar un comando justo después de que una tarea de otro usuario conectado haya terminado ...>: DUna versión anterior de la secuencia de comandos anterior puede ser interesante, si desea evitar una dependencia
pgrep
y aceptar buscar ID de proceso usted mismo:Ligeramente fuera de tema, pero útil en situaciones similares: uno podría estar interesado en
reptyr
una herramienta que "robe" un proceso de algún shell (padre) y lo ejecute desde el shell actual. He intentado implementaciones similares yreptyr
es la más bonita y confiable para mis propósitos.fuente