循环创建无限grep流程

时间:2019-05-30 14:16:17

标签: bash centos7 netstat

我已经将bash脚本编码为当有人使用netstat时不显示某些端口。我已经将它放在.bashrc文件中。

function test(){
    if [ ! -n "$1" ]; then
       netstat | grep -v 1111;
    else
       netstat "$1" | grep -v 1111;
    fi
}
alias netstat='test'

执行时,有时在执行netstat | grep 1111时(并非总是如此,并且无法指定在哪种情况下)会创建无限数量的grep进程。

预期结果将返回不带过滤端口的netstat输出。

2 个答案:

答案 0 :(得分:4)

不需要别名,您可以使用command命令来区分函数netstat和“真实”命令netstat

netstat () {
    if [ -z "$1" ]; then
        command netstat
    else
        command netstat "$1"
    fi | grep -v 1111
}

如果您的实际意图是确定是否有一个参数,而不是简单地确定一个非空参数(即,区分netstatnetstat ""),则可以将其减少(在{{ 1}})

bash

如果netstat () { command netstat "${@:1:1}" | grep -v 1111 } 确实为0,则参数扩展“消失”。

答案 1 :(得分:0)

主要问题是如何在没有完整路径的情况下指定您对$#的使用。这样您就可以体验递归。

我建议使用类似netstat的名称。然后您的内部使用可以基于您拥有的NETSTAT完整路径。