Help With At Bash Script

Home » CentOS » Help With At Bash Script
CentOS 9 Comments

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

  • 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

  • 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