Shell 我应该做什么来代替grep';如何提高ps的输出?

Shell 我应该做什么来代替grep';如何提高ps的输出?,shell,grep,shortcut,idioms,ps,Shell,Grep,Shortcut,Idioms,Ps,每个人都知道这有多烦人: [mybox:~ #] ps aux | grep myservice root 2273 0.0 0.0 4360 760 ? Ss 18:06 0:00 /usr/sbin/myservice root 18590 0.0 0.0 4100 788 pts/2 S+ 21:21 0:00 grep myservice 你得到了你想要的过程,再加上grep。那么,好吧,你可以做: [myb

每个人都知道这有多烦人:

[mybox:~ #] ps aux | grep myservice
root      2273  0.0  0.0   4360   760 ?        Ss   18:06   0:00 /usr/sbin/myservice
root     18590  0.0  0.0   4100   788 pts/2    S+   21:21   0:00 grep myservice
你得到了你想要的过程,再加上grep。那么,好吧,你可以做:

[mybox:~ #] ps aux | grep myservice | grep -v grep
root      2273  0.0  0.0   4360   760 ?        Ss   18:06   0:00 /usr/sbin/myservice


但前者是3个完整的命令,后者只获取进程id。是否有更好的替代方案?

ps
+
pgrep
可能

$ ps -fp $(pgrep myservice)
UID    PID  PPID  C STIME TTY  TIME      CMD
user   5422  5315  0 15:37 ?   00:00:04  /usr/bin/myservice

如果您现在输入进程的全名

ps -F -C myservice
但是它不适用于
'myserv*'

如果您只知道部分命令,则可以将命令减少到2:

ps aux | grep [m]yserv

将管道命令存储到接受位置参数的小bash shell中如何?如果这是目标,这将减少击键次数

[mybox:~ #] cat mycmd
    #!/bin/bash
    ps aux | grep $1 | grep -v grep
可以称之为:

[mybox:~ #] mycmd myservice
  root      2273  0.0  0.0   4360   760 ?        Ss   18:06   0:00 /usr/sbin/myservice

-p$(pgrep myserv)
而不是
-C myservice
我虽然想法是减少命令,但仍然是2。这是个好主意,但是:1。如果这样做,您必须记住另一个shell命令2。如果不是您的系统,并且您在那里没有个人帐户,那么将可执行脚本留在周围是不礼貌的。不过,我给了你一个升级投票…如果进程没有运行,这会导致一个错误。这是真的。您始终可以重定向错误,以避免干扰(
2>/dev/null
),或将
pgrep
的输出保存在变量中,以便在
ps
之前进行检查。
[mybox:~ #] mycmd myservice
  root      2273  0.0  0.0   4360   760 ?        Ss   18:06   0:00 /usr/sbin/myservice