Предположим у вас есть скрипт
$ cat script.bash
#!/bin/bash
echo "Hello World"
sleep 10
Как видно, данный скрипт будет просто залипать на 10 секунд, чтобы мы смогли протестировать.
И запускать будем так:
$ pgrep script.bash && echo "already running" || ( ./script.bash & )
Hello World
$
Далее, если запустить тот же скрипт повторно, пока не завершилась его работа, то увидим следующее:
$ pgrep script.bash && echo "already running" || ( ./script.bash & )
10197
already running
$
Ну, и если подождать 10 секунд и запустить снова, то скрипт опять запустится:
$ pgrep script.bash && echo "already running" || ( ./script.bash & )
Hello World
$