Você recebe um número maior do grep
porque há mais programas em execução que correspondem ao padrão.
Se você observar a saída de grep
(sem o -c
), verá quais linhas na saída de ps
correspondem. Por exemplo. se eu fizer um script como esse, recebo três:
$ cat check_blynk.sh
#!/bin/bash
foo=$(/bin/ps a | /bin/grep "blynk")
echo "$foo"
$ bash check_blynk.sh
28874 pts/11 S+ 0:00 bash check_blynk.sh
28875 pts/11 S+ 0:00 bash check_blynk.sh
28877 pts/11 S+ 0:00 /bin/grep blynk
Esse é um para o grep
, pois o padrão que ele usa corresponde a si mesmo, um para o script que por acaso contém a mesma palavra em seu nome e outro para o fato de que a ps | grep
está sendo executado em um subshell, ou seja, outra cópia do shell. (Eu não tenho certeza do que o quarto seria.)
Você pode querer usar algo como pgrep -c blynk
, assumindo que blynk
é o nome do arquivo de programa. Por padrão, pgrep
verifica o nome real do arquivo do programa em execução, em vez da linha de comando inteira. (Com -f
verifica a linha de comando, mas você vai corresponder ao script Bash novamente)