Help With At Bash Script
I am attempting to get a script borrowed from DJB to work on my CentOS-6.6
box. Simplified it looks like this:
tcpdump -l -n -e port 53 \
| awk ‘{if ($14 ~ /A.*?/) print $15}’ \
| while read domain ; do echo $domain ; done ;
The sticking point is the ‘while read’ construct. Run just as ‘tcpdum | awk’
I get this:
english.stackexchange.com. www.urbandictionary.com. www.urbandictionary.com. www.urbandictionary.com. www.urbandictionary.com. api.mywot.com. a.udimg.com. a.udimg.com. fonts.googleapis.com.
. . .
Run with the ‘while read $domain ; do echo ‘ pipe nothing appears whatsoever. What am I doing wrong?
9 thoughts on - Help With At Bash Script
Am 02.12.2014 um 19:05 schrieb James B. Byrne:
while read domain; do
echo ${domain}
done < <(tcpdump -l -n -e port 53 | awk '{if ($14 ~ /A.*?/) print $15}') The “echo ${domain}” part is certainly just a simplification of a more complex command to run on the variable. Else it would be pointless as awk is printing out the domain field 15. Alexander
If not a typo in the message, your mistake, and I do it all the time, is using
while read $domain
instead of
while read domain
Tony
Am 02.12.2014 um 20:47 schrieb Tony Schreiner:
[ … ]
Tony,
no, “while read $domain” is wrong.
Alexander
Works for me as is. You just have to wait for your pipe buffer to fill so the output is bursty.
You have to do
cat domain in back tiks
instead of read domain.
(Sent from iPhone, so please accept my apologies in advance for any spelling or grammatical errors.)
What is domain, BTW?
(Sent from iPhone, so please accept my apologies in advance for any spelling or grammatical errors.)
This is an error you can’t blame on your device. domain is not a file, but a bash variable. read takes stdin (which is what the OP’s snippet is doing) and populates the named variable(s) (domain in this case).
–keith
Never used that construct in this context.
if i understood cerrectly,you need that:
domain=$(tcpdump -l -n -e port 53 | awk ‘{if ($14 ~ /A.*?/) print $15}’)
while read line do echo $line done < $domain