#I used to have this, but I don't want to write to the disk
#
pcap="somefile.pcap"
tcpdump -n -r $pcap > all.txt
while read line; do
ARRAY[$c]="$line"
c=$((c+1))
done < all.txt
Следующие сбои для работы.
# I would prefer something like...
#
pcap="somefile.pcap"
while read line; do
ARRAY[$c]="$line"
c=$((c+1))
done < $( tcpdump -n -r "$pcap" )
Слишком мало результатов на Google (не понимает то, что я хочу найти :(). Я хотел бы сохранить это Совместимым с границей (/bin/sh), но это не должно быть.
for line in $(tcpdump -n -r $pcap)
do
command
done
Это не совсем то, что мне нужно. Но это близко. И Shell совместим. Я создаю HTML-таблицы из вывода tcpdump. Цикл for
создает новую строку
Это работает в bash:
while read line; do
ARRAY[$c]="$line"
c=$((c+1))
done < <(tcpdump -n -r "$pcap")
Если вас не волнует, что вы боретесь, вы можете переключиться на Perl:
my $pcap="somefile.pcap";
my $counter = 0;
open(TCPDUMP,"tcpdump -n -r $pcap|") || die "Can not open pipe: $!\n";
while (<TCPDUMP>) {
# At this point, $_ points to next line of output
chomp; # Eat newline at the end
$array[$counter++] = $_;
}
Или в оболочке используйте для
:
for line in $(tcpdump -n -r $pcap)
do
command
done
Это sh
-совместимо:
tcpdump -n -r "$pcap" | while read line; do
# something
done
Однако, sh
не имеет массивов, поэтому вы не можете иметь ваш код, как в sh
. Другие правы в том, что и bash
, и perl
сегодня довольно широко распространены, и вы можете рассчитывать на их наличие на не древних системах.
UPDATE для отражения комментария @Dennis