如何将命令的一部分作为变量bash传递?

时间:2013-09-24 16:56:52

标签: linux bash

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

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

编辑:

另一个。另一个。下面的答案对我来说非常合适。谢谢先生!

2 个答案:

答案 0 :(得分: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}'

答案 1 :(得分: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

OR

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

更改执行权限:

chmod a+x a.bash
./a.bash ssh