a="grep ssh | grep -v grep"
ps -ef | $a | awk '{print $2}'
我怎样才能完成上述工作?我有一个部分,我不仅要传递grep术语,但可能传递多个grep术语,这意味着我需要将“term1 | grep term2”作为变量传递。
编辑:
另一个。另一个。下面的答案对我来说非常合适。谢谢先生!答案 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