Bash脚本提供不需要的输出

时间:2012-02-10 13:00:21

标签: bash

我正面对以下bash脚本:

#! /bin/bash
processname=$1
x=1
while [ $x -eq 1 ] ; do
    ps -el | grep $processname | awk ' {if($15!="grep") print "The memory consumed by the process " $15 " is = "$9}  ' >> out.log
    sleep 30
done

我正在运行:

$ ./myscript.sh Firefox

但是当我在文件中看到输出时,除firefox进程外,我还获取了/bin/bash进程的信息

The memory consumed by the process /Applications/Firefox.app/Contents/MacOS/firefox is = 911328  
The memory consumed by the process /bin/bash is = 768

有人可以帮助我,这样我只想获得与Firefox进程相关的信息,而不是其他任何东西(/bin.bash等)

3 个答案:

答案 0 :(得分:3)

常见的诀窍是将grep Firefox更改为grep [F]irefox。在这种情况下,您可以使用

实现它
ps | grep '['${processname:0:1}']'${processname:1}

答案 1 :(得分:2)

这是正常的,因为$processnameFirefox。由于您的命令也监视它,因此有一个进程使用它。

例如,尝试ps -el | grep Firefox,您将获得两个匹配的流程行(如果您有一个Firefox运行实例),一个是Firefox,另一个是寻找Firefox的grep命令。

grep -v /bin/bash'中管道输出应解决此问题。例如:

ps -el | grep $processname | awk ...

变为:

ps -el | grep $processname | grep -v 'grep' | awk ...

答案 2 :(得分:1)

你打电话

ps -el | grep $processname | awk ' {if($15!="grep") print "The memory consumed by the process " $15 " is = "$9}  '

这意味着你运行awk并将其输入与grep的输出连接起来。然后启动grep并输出ps -el作为输入。

当bash启动ps时,你有grep和awk运行。

解决方案:运行ps -el并记住它的输出。然后运行grep和awk。它应该是这样的:

ps -el > ps.tmp
grep $processname ps.tmp | awk ' {if($15!="grep") print "The memory consumed by the process " $15 " is = "$9}  ' >> out.log

可能这可以在不使用tmp文件的情况下完成。像TMP=$(ps -el)一样。但我不知道如何在变量

上运行grep过滤器