Quoting Siegex:
Because the grep
process itself is being returned by ps
.
You can either of these:
"trick" grep
to not match itself by surrounding one of the search
characters in a character class [ ]
which doesn't change the
functionality:
Or, in this case,
Pipe to grep -v grep
, so that the process doesn't match:
var=$(ps ax | grep -v grep | grep "$0")
See an example. Here we have a process sleep
:
$ sleep 20 &
[1] 5602
If we check for it in the output of ps
it appears twice!
$ ps -ef| grep sleep
me 5602 5433 0 09:49 pts/2 00:00:00 sleep 20
me 5607 5433 0 09:49 pts/2 00:00:00 grep --colour=auto sleep
So we can either use a character class:
$ ps -ef| grep [s]leep
me 5602 5433 0 09:49 pts/2 00:00:00 sleep 20
Or grep out the grep process:
$ ps -ef| grep sleep | grep -v grep
me 5602 5433 0 09:49 pts/2 00:00:00 sleep 20