Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent grep returning an error when input doesn't match

Tags:

grep

bash

I want to write in a bash script a piece of code that checks if a program is already running. I have the following in order to search whether bar is running

 foo=`ps -ef | grep bar | grep -v grep` 

The

 grep -v grep 

part is to ensure that the "grep bar" is not taken into account in ps results

When bar isn't running, foo is correctly empty. But my problem lies in the fact tha the script has

 set -e 

which is a flag to terminate the script if some command returns an error. It turns out that when bar isn't running, "grep -v grep" doesn't match with anything and grep returns an error. I tried using -q or -s but to no avail.

Is there any solution to that? Thx

like image 314
George Kastrinis Avatar asked Jul 01 '11 16:07

George Kastrinis


People also ask

Does grep fail if no match?

If there's no match, that should generally be considered a failure, so a return of 0 would not be appropriate. Indeed, grep returns 0 if it matches, and non-zero if it does not.

How do I reduce grep output?

The quiet option ( -q ), causes grep to run silently and not generate any output. Instead, it runs the command and returns an exit status based on success or failure. The return status is 0 for success and nonzero for failure.

What does the '- V option to grep do?

-v means "invert the match" in grep, in other words, return all non matching lines.

What does grep return if it doesn't find anything?

The grep manual at the exit status section report: EXIT STATUS The exit status is 0 if selected lines are found, and 1 if not found. If an error occurred the exit status is 2.


1 Answers

Sure:

ps -ef | grep bar | { grep -v grep || true; } 

Or even:

ps -ef | grep bar | grep -v grep | cat 
like image 161
Sean Avatar answered Sep 21 '22 19:09

Sean