2
a="grep ssh | grep -v grep"
ps -ef | $a | awk '{print $2}'

我怎样才能使上述工作?我有一个部分,我不仅需要传递 grep 术语,还可能传递多个 grep 术语,这意味着我需要将“term1 | grep term2”作为变量传递。

编辑:

下面的另一个.anon.coward 答案对我来说非常有效。谢谢你,先生!

4

2 回答 2

5

改为创建一个函数:

a() {
    grep ssh | grep -v grep
}
ps -ef | a | awk '{print $2}'

另一种解决方案是使用 eval 但除非经过适当清理,否则它是不安全的,因此不推荐使用。

a="grep ssh | grep -v grep"
ps -ef | eval "$a" | awk '{print $2}'
于 2013-09-24T17:07:00.357 回答
2

如果你只想要pid一个进程,那么使用pgrep.

pgrep ssh

您可以将其放入 bash 中,如下所示 (a.bash):

#!/bin/bash
pname=$1
pgrep "$pname"

或者,如果您想ps -ef用于编写的其他目的,则在脚本中进行以下操作可能会起作用:

pname=$1
ps -ef | grep "$pname" | grep -v grep | awk '{print $2}'  # I would personally prefer this

或者

ps -ef | eval "$pname" | awk '{print $2}'  # here $pname can be "grep ssh | grep -v grep"

更改执行权限:

chmod a+x a.bash
./a.bash ssh
于 2013-09-24T17:00:07.593 回答