a="grep ssh | grep -v grep"
ps -ef | $a | awk '{print $2}'
我怎样才能使上述工作?我有一个部分,我不仅需要传递 grep 术语,还可能传递多个 grep 术语,这意味着我需要将“term1 | grep term2”作为变量传递。
编辑:
下面的另一个.anon.coward 答案对我来说非常有效。谢谢你,先生!
改为创建一个函数:
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}'
如果你只想要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