Don't suggest pgrep for `ps -p .. | grep` (fixes #2597)
This commit is contained in:
parent
a524929b69
commit
14056a7f3a
|
@ -550,6 +550,7 @@ prop_checkPipePitfalls19 = verifyNot checkPipePitfalls "foo | grep -A2 bar | wc
|
||||||
prop_checkPipePitfalls20 = verifyNot checkPipePitfalls "foo | grep -B999 bar | wc -l"
|
prop_checkPipePitfalls20 = verifyNot checkPipePitfalls "foo | grep -B999 bar | wc -l"
|
||||||
prop_checkPipePitfalls21 = verifyNot checkPipePitfalls "foo | grep --after-context 999 bar | wc -l"
|
prop_checkPipePitfalls21 = verifyNot checkPipePitfalls "foo | grep --after-context 999 bar | wc -l"
|
||||||
prop_checkPipePitfalls22 = verifyNot checkPipePitfalls "foo | grep -B 1 --after-context 999 bar | wc -l"
|
prop_checkPipePitfalls22 = verifyNot checkPipePitfalls "foo | grep -B 1 --after-context 999 bar | wc -l"
|
||||||
|
prop_checkPipePitfalls23 = verifyNot checkPipePitfalls "ps -o pid,args -p $(pgrep java) | grep -F net.shellcheck.Test"
|
||||||
checkPipePitfalls _ (T_Pipeline id _ commands) = do
|
checkPipePitfalls _ (T_Pipeline id _ commands) = do
|
||||||
for ["find", "xargs"] $
|
for ["find", "xargs"] $
|
||||||
\(find:xargs:_) ->
|
\(find:xargs:_) ->
|
||||||
|
@ -563,8 +564,15 @@ checkPipePitfalls _ (T_Pipeline id _ commands) = do
|
||||||
]) $ warn (getId find) 2038
|
]) $ warn (getId find) 2038
|
||||||
"Use -print0/-0 or -exec + to allow for non-alphanumeric filenames."
|
"Use -print0/-0 or -exec + to allow for non-alphanumeric filenames."
|
||||||
|
|
||||||
for' ["ps", "grep"] $
|
for ["ps", "grep"] $
|
||||||
\x -> info x 2009 "Consider using pgrep instead of grepping ps output."
|
\(ps:grep:_) ->
|
||||||
|
let
|
||||||
|
psFlags = maybe [] (map snd . getAllFlags) $ getCommand ps
|
||||||
|
in
|
||||||
|
-- There are many ways to specify a pid: 1, -1, p 1, wup 1, -q 1, -p 1, --pid 1.
|
||||||
|
-- For simplicity we only deal with the most canonical looking flags:
|
||||||
|
unless (any (`elem` ["p", "pid", "q", "quick-pid"]) psFlags) $
|
||||||
|
info (getId ps) 2009 "Consider using pgrep instead of grepping ps output."
|
||||||
|
|
||||||
for ["grep", "wc"] $
|
for ["grep", "wc"] $
|
||||||
\(grep:wc:_) ->
|
\(grep:wc:_) ->
|
||||||
|
@ -782,6 +790,7 @@ prop_checkUnquotedExpansions7 = verifyNot checkUnquotedExpansions "cat << foo\n$
|
||||||
prop_checkUnquotedExpansions8 = verifyNot checkUnquotedExpansions "set -- $(seq 1 4)"
|
prop_checkUnquotedExpansions8 = verifyNot checkUnquotedExpansions "set -- $(seq 1 4)"
|
||||||
prop_checkUnquotedExpansions9 = verifyNot checkUnquotedExpansions "echo foo `# inline comment`"
|
prop_checkUnquotedExpansions9 = verifyNot checkUnquotedExpansions "echo foo `# inline comment`"
|
||||||
prop_checkUnquotedExpansions10 = verify checkUnquotedExpansions "#!/bin/sh\nexport var=$(val)"
|
prop_checkUnquotedExpansions10 = verify checkUnquotedExpansions "#!/bin/sh\nexport var=$(val)"
|
||||||
|
prop_checkUnquotedExpansions11 = verifyNot checkUnquotedExpansions "ps -p $(pgrep foo)"
|
||||||
checkUnquotedExpansions params =
|
checkUnquotedExpansions params =
|
||||||
check
|
check
|
||||||
where
|
where
|
||||||
|
@ -795,7 +804,7 @@ checkUnquotedExpansions params =
|
||||||
warn (getId t) 2046 "Quote this to prevent word splitting."
|
warn (getId t) 2046 "Quote this to prevent word splitting."
|
||||||
|
|
||||||
shouldBeSplit t =
|
shouldBeSplit t =
|
||||||
getCommandNameFromExpansion t == Just "seq"
|
getCommandNameFromExpansion t `elem` [Just "seq", Just "pgrep"]
|
||||||
|
|
||||||
|
|
||||||
prop_checkRedirectToSame = verify checkRedirectToSame "cat foo > foo"
|
prop_checkRedirectToSame = verify checkRedirectToSame "cat foo > foo"
|
||||||
|
|
Loading…
Reference in New Issue