in reply to spaces in grep command argument executed in backticks
For a general solution surviving not just embedded blanks, check the recent thread on use variables of system and my reply on secure use here.</p.
Then again, you can just move the grep to perl, which takes also care of the issue and allows more powerful regexes. A perl -e "one-liner" example would be e.g.
perl -e '$module=$ARGV[0]; @ps=`ps -eaf`; shift @ps if $ps[0]=~/^UID|^USER/; @ps=grep {/$module/} @ps; $pid=+(split / +/, $ps[0])[1]; warn "pid: $pid"; warn "multiple matches" if $#ps>0; warn @ps' urxvt
Wasn't there a module to abstract from or at least parse ps: the ps output if rather inconsistent when comparing e.g. BSD vs SYSV vs GNU...? Just consider the PID field, which for me is the 2nd field.
Update: stripped the and not /grep/ from the grep, claiming shell muscle memory - ps and a lone grep in one line just feel wrong. @jwkrahn thanx for spotting it!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: spaces in grep command argument executed in backticks
by jwkrahn (Abbot) on Oct 22, 2009 at 07:57 UTC |