Usando o pgrep ...
#!/bin/bash
PNAME=$(basename "$0")
COUNT=$(pgrep -c -x $PNAME)
(( COUNT > 1 )) && echo "$0 already running, exiting..."
Eu estou tentando encontrar o número de execuções de um script, mas é sempre 2, mesmo que apenas uma seja executada.
sh 11.sh
1
11.sh already running,exiting..
aqui é o código.
ps -ef | grep -v grep | grep -c "$0"
if [[ 'ps -ef | grep -v grep | grep -c "$0"' -gt "1" ]]; then
'echo " $0 already running,exiting.."'
fi
Usando o pgrep ...
#!/bin/bash
PNAME=$(basename "$0")
COUNT=$(pgrep -c -x $PNAME)
(( COUNT > 1 )) && echo "$0 already running, exiting..."
Considerando apenas uma única instância de 11.sh em execução e recebendo 11.sh :
n='ps -ef | grep -wc "$0"' n=$((n-2))
echo $n
[ $n -gt "1" ] && echo " $0 already running,exiting.."
Executando sh 11.sh
de saídas:
1
Os backticks e o grep
adicionam mais duas linhas ps
. Como sabemos que o número é 2 , basta subtrair n-2
para obter o número correto.