Цикл создания бесконечного процесса grep - PullRequest
1 голос
/ 30 мая 2019

Я кодировал скрипт 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 ]

4 голосов
/ 30 мая 2019

Псевдоним не нужен, и вы можете использовать команду command, чтобы различать вашу функцию netstat и "настоящую" команду netstat.

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

Если ваше реальное намерение состоит в том, чтобы определить, есть ли аргумент, а не просто непустой аргумент (т. Е. Провести различие между netstat и netstat ""), вы можете уменьшить его (в bash) до

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

Расширение параметра «исчезает», если $# действительно равно 0.

0 голосов
/ 30 мая 2019

Основная проблема в том, как указано использование netstat без полного пути. Таким образом, вы получите опыт рекурсии.

Я бы предложил использовать что-то вроде export NETSTAT=$(which netstat). Тогда ваше внутреннее использование может основываться на вашем полном пути NETSTAT.

...