Modificar trabajos en segundo plano y / o notificar sobre la finalización del trabajo posterior al lanzamiento

Me gustaría poder modificar de algún modo un command en ejecución y / o recibir una notificación cuando un command en ejecución se complete después de que se haya iniciado.

Normalmente, cuando sé que un command va a tomar mucho time, estableceré preventivamente algo para una notificación:

./takes_long_time && touch done 

o

 ./takes_long_time; touch done 

Mi pregunta es si ./takes_long_time se ejecutó sin touch , ¿hay alguna forma de que pueda volver y agregarlo sin reiniciar ./takes_long_time ?

Al hacer un poco más de búsqueda, encontré la solución :

 $ ./takes_long_time <ctrl-z> [1]+ Stopped ./takes_long_time $ fg && touch done 

Existen algunas advertencias según cómo use esto ( fg; touch done puede producir resultados indeseables, ver publicación vinculada).

Además, no puede hacer cosas como agregar una canalización ( fg | grep something ), aunque esta es una limitación comprensible.

Lo más probable es que tengas que poner ./takes_long_time en segundo plano;

en lugar de

 ./takes_long_time && touch done 

hacer

 ./takes_long_time & 

Esto colocará ./takes_long_time en segundo plano para ejecutar. Luego puede ejecutar ./takes_long_time . Por lo tanto, habrá dos de estos processs ejecutándose en segundo plano.

Una forma no tradicional de ser notificado de si un command está terminado puede ser como

 if command_line; then echo "It is done" fi 

ejemplo

 if sleep 5; then echo "Finish sleeping for 5 seconds" fi