Назад | Перейти на главную страницу

Помещение этой команды в сценарий bash

с помощью Google скрипт, который измеряет пропускную способность многоадресных потоков.

Вот tcpdump -tnn -i eth1 -f multicast | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10' & sleep 2s && pkill -HUP -f tcpdump

Оказывается, все в порядке, за исключением того, что мне нужно нажать Enter, чтобы вернуться к приглашению. Я знаю, что это проблема &&, но не знаю, как ее исправить.

Как я могу привязать его к сценарию оболочки. И, возможно, добавьте $ var для количества секунд.

Попробуйте использовать timeout чтобы убить tcpdump через некоторое время:

(timeout -s HUP 2 tcpdump -tnn -i eth1 -f multicast || true) | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10'

Чтобы написать сценарий:

#!/bin/bash

if ! [[ "$1" =~ ^[0-9]+$ ]]; then
        echo "Usage: $0 <number of seconds>"
        exit 1
fi

(timeout -s HUP $1 tcpdump -tnn -i eth1 -f multicast || true) | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10'

вам не нужно нажимать Enter для выхода. это просто косметический вопрос. это потому, что ваш вывод «перезаписывает» ваш терминал (вы все равно можете ввести любую команду и нажать Enter - она ​​будет выполнена).

Чтобы «исправить» эту проблему с макетом, вы можете попробовать добавить в строку «; sleep 1; echo», чтобы она выглядела так:

tcpdump -tnn -i eth1 -f multicast | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10' & sleep 2s && pkill -HUP -f tcpdump; sleep 1; echo

Надеюсь, это поможет.

А вот и ваш сценарий bash с переменной:

#!/bin/bash

SLEEPTIME=5

tcpdump -tnn -i eth0 -f multicast | sort | uniq -c | awk -v a=$SLEEPTIME '{print $3,"> "$5,$1*$NF/a*8/1024 " Kbps"}' | awk '$1 > 10' & sleep $SLEEPTIME && pkill -HUP -f tcpdump; sleep 1; echo