#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=$(
This is sh
-compatible:
tcpdump -n -r "$pcap" | while read line; do
# something
done
However, sh
does not have arrays, so you can't have your code like it is in sh
. Others are correct in saying both bash
and perl
are nowadays rather widespread, and you can mostly count on their being available on non-ancient systems.
UPDATE to reflect @Dennis's comment
If you don't care about being bourne, you can switch to 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++] = $_;
}
Or in shell, use for
:
for line in $(tcpdump -n -r $pcap)
do
command
done
for line in $(tcpdump -n -r $pcap)
do
command
done
This isn't exactly doing what I need. But it is close. And Shell compatible. I'm creating HTML tables from the tcpdump output. The for
loop makes a new <tr> row for each word. It should make a new row for each line (\n ending).
Paste bin script01.sh.
This works in bash:
while read line; do
ARRAY[$c]="$line"
c=$((c+1))
done < <(tcpdump -n -r "$pcap")