Eu quero saber de dentro do script se esse script já está em execução.
Um olhar regular em ps
não vai cortá-lo como ele recebe diferentes argumentos em ordem diferente ..
Portanto, a função deve ser:
check_already_running(){
if [ 'ps -ef| grep $script_name_with_arguments | wc -l ' -gt 1 ]
then
echo "already running"
exit 1
else
echo "ok"
fi
}
Por exemplo, vamos supor que eu executei ./test.sh -a 2 -c 4
, então:
server:/tmp >./test.sh
ok
server:/tmp >./test.sh -a
ok
server:/tmp >./test.sh -a 2 -c 4
already running
server:/tmp >./test.sh -a 2 -c 4
already running
server:/tmp >./test.sh -c 4 -a 2
already running
Eu estou supondo que os últimos 2 exemplos tornam muito mais difícil e mais longo verificar, então se você puder fornecer 2 opções - uma que seja suficiente para o comando exacto em execução e a outra se o usuário enviar os mesmos argumentos mas com diferentes ordem / espaçamento extra.
Tags bash shell shell-script