#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)を保持したいが、haveまであります。
for line in $(tcpdump -n -r $pcap)
do
command
done
これは私が必要としていることを正確に行っているわけではありません。しかし、それは近いです。シェル互換。 tcpdumpの出力からHTMLテーブルを作成しています。 for
ループは、Wordごとに新しい<tr>行を作成します。 lineごとに新しい行を作成する必要があります(\ n終了)。 Paste bin script01.sh 。
これはsh
互換です:
tcpdump -n -r "$pcap" | while read line; do
# something
done
ただし、sh
には配列がないため、sh
のようにコードを含めることはできません。他の人はbash
とPerl
の両方が今日広く普及していると言って間違いはなく、ほとんどが古代ではないシステムで利用できると期待できます。
[〜#〜] update [〜#〜] @Dennisのコメントを反映
これは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
を使用します:
for line in $(tcpdump -n -r $pcap)
do
command
done