循环创建无限 grep 进程

Loop creating infinite grep process

我编写了一个 bash 脚本,当有人使用 netstat 时不显示特定端口。我已经把它放在 .bashrc 文件中了。

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

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

预期的结果是 return 没有过滤端口的 netstat 输出。

不需要别名,您可以使用 command 命令来区分函数 netstat 和 "real" 命令 netstat.

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

如果您的实际意图是确定是否存在参数,而不是简单的 non-empty 参数(即区分 netstatnetstat ""),您可以减少此(在bash)到

netstat () {
    command netstat "${@:1:1}" | grep -v 1111
}

参数展开"disappears"如果$#真的是0.

主要问题是如何指定您对 netstat 的使用,没有完整路径。所以你得到了递归体验。

我建议使用 export NETSTAT=$(which netstat) 之类的东西。那么你的内部使用就可以根据你拥有的NETSTAT全路径了。