Строки количества незавершения входа

Нет. ls не имеет этой возможности (и немногие хотели бы ее к).

5
03.09.2014, 21:01
4 ответа

Назначение Ctrl+C из клеммы посылает SIGINT в группу процесса на передний план. Если необходимо, чтобы wc пережил это событие и выдал выход, необходимо, чтобы он игнорировал сигнал.

Решение заключается в том, чтобы запустить wc в подоболочке и заставить ее родительский набор оболочки SIGINT игнорироваться перед запуском wc. Wcwc наследует эту установку и не умирает, когда SIGINT SIGINT отправляется в группу процессов. Остальная часть трубопровода погибнет, оставив wc показания из трубы, которая не имеет процесса на другом конце. Это приведет к тому, что wc увидит EOF на трубе, а затем выведет свои отсчеты и выйдет.

ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" | (trap '' INT ; wc)
4
27.01.2020, 20:38

Вот как вы можете продолжать подсчет после считывания текущего счетчика:

Моим непрерывным источником тестового ввода является пинг:

$ ping 127.0.0.1  
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.025 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.032 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.030 ms
^C

С другими решениями мы должны были решить, когда считывали количество строк и прерывали выполняющуюся команду.
Но в идеале мы просто хотели бы знать текущее количество строк, не так ли?

Так почему бы просто не посчитать строки? Правильный инструмент для работы - nl , добавляя текущий счетчик перед каждой строкой:

$ ping 127.0.0.1 | nl
     1  PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
     2  64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms
     3  64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.022 ms
     4  64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.025 ms
     5  64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.021 ms
     6  64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.022 ms
     7  64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.022 ms
     8  64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.021 ms
     9  64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.029 ms
^C
2
27.01.2020, 20:38

Вы можете использовать:

$ ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" |
perl -nle 'system("clear");print $.'

perl будет отслеживать, какие строки у вас были, очистите старый вывод перед печатью.

0
27.01.2020, 20:38

Если вы хотите указать ограничение по времени (а не просто делать это с манжеты), вы могли бы использовать этот трюк

( cmdpid=$BASHPID; (sleep 300; kill $cmdpid) & exec ngrep (ngrep args) ) | grep ":80" | wc

, вдохновленный этим ответом на недавний вопрос. на SU; по сути Как остановить запущенную программу через 5 минут и продолжить?

0
27.01.2020, 20:38

Теги

Похожие вопросы