mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Updating to fit the formatting plus adding a few contradictions found from running my own code.
27
SC2009.md
27
SC2009.md
@@ -1,12 +1,25 @@
|
||||
# SC2009 Consider using pgrep instead of grepping ps output.
|
||||
## SC2009 Consider using pgrep instead of grepping ps output.
|
||||
|
||||
## Problematic Code:
|
||||
### Problematic Code:
|
||||
|
||||
`ps ax | grep -v grep | grep "$service" > /dev/null`
|
||||
ps ax | grep -v grep | grep "$service" > /dev/null
|
||||
|
||||
## Correct Code:
|
||||
### Correct Code:
|
||||
|
||||
`pgrep -f "$service" > /dev/null`
|
||||
pgrep -f "$service" > /dev/null
|
||||
|
||||
### Rationale:
|
||||
|
||||
If you are just after a pid from a running program, then pgrep is a much safer alternative. Especially if you are also looking for a pid belonging to a certain user or group. All of the parameters are in one command and it cat eliminate multiple greps, cuts, seds, awks, ect.
|
||||
|
||||
### Contradictions
|
||||
|
||||
What if you have the pid and you are looking for the matching program name?
|
||||
|
||||
pid=123; ps ax | grep "$pid"
|
||||
|
||||
What if you want a range of the ps field, like from the 16th space to the end of the line?
|
||||
ps ax | grep "$pid" | cut -d" " -f16-
|
||||
|
||||
Both are valid cases where SC2009 is not valid.
|
||||
|
||||
## Source
|
||||
This seemed to work for me but I am no expert.
|
Reference in New Issue
Block a user