¿Hay una secuencia de comandos o una forma en Linux que cuando intento ejecutar una secuencia de comandos/proceso de shell, si se está ejecutando lo mismo, indicará que se está ejecutando lo mismo y se cerrará; de lo contrario, continuará?
Respuesta aceptada:
Puedes usar este delineador para hacer lo que quieras:
$ pgrep script.bash && echo "already running" || ( ./script.bash & )
Ejemplo
Digamos que tenía este script:
$ cat script.bash
#!/bin/bash
echo "Hello World"
sleep 10
Si usamos nuestra única línea:
$ pgrep script.bash && echo "already running" || ( ./script.bash & )
Hello World
$
Lo ejecutamos de nuevo:
$ pgrep script.bash && echo "already running" || ( ./script.bash & )
10197
already running
$
Esperando 10 segundos y ejecutándolo nuevamente, nuevamente funciona:
$ pgrep script.bash && echo "already running" || ( ./script.bash & )
Hello World
$