Сценарии Unix, попытки хостов, получение «013 not found: 3 (NXDOMAIN)» - PullRequest
1 голос
/ 13 июля 2009

У меня есть текстовый файл, a.txt. Содержание:

$ cat a.txt
microsoft.com
google.com
ibm.com

Я пытаюсь запустить команду хоста в каждой строке, чтобы получить IP-адрес. Вот мой сценарий:

#!/bin/sh
for i in `cat a.txt`
do
echo $i
host $i
done

Когда я запускаю его, я получаю это:

$ ./a.sh
microsoft.com
Host microsoft.com\013 not found: 3(NXDOMAIN)
google.com
Host google.com\013 not found: 3(NXDOMAIN)
ibm.com
Host ibm.com\013 not found: 3(NXDOMAIN)

Однако, если при редактировании моего скрипта явно указывается хост:

#!/bin/sh
host microsoft.com
host google.com
host ibm.com

Работает.

Знаете ли вы, что я получаю "013 не найдено: 3 (NXDOMAIN)"?

Спасибо Chris

Ответы [ 2 ]

3 голосов
/ 13 июля 2009

В вашем файле есть несколько забавных персонажей (в конце каждой строки). Есть:

od -xcb a.txt

и опубликуйте результаты здесь. Возможно, файл пришел из другой системы (DOS / Windows), хотя \ 013 является символом VT, а не CR.

Когда я делаю то же самое с файлами, созданными с нуля, я получаю:

pax@pax-desktop:~$ . ./a.sh
microsoft.com
microsoft.com has address 207.46.197.32
microsoft.com has address 207.46.232.182
microsoft.com mail is handled by 10 mail.messaging.microsoft.com.
google.com
google.com has address 74.125.45.100
google.com has address 74.125.67.100
google.com has address 74.125.127.100
google.com mail is handled by 10 smtp2.google.com.
google.com mail is handled by 10 smtp3.google.com.
google.com mail is handled by 10 smtp4.google.com.
google.com mail is handled by 10 smtp1.google.com.
ibm.com
ibm.com has address 129.42.16.103
ibm.com has address 129.42.17.103
ibm.com has address 129.42.18.103
ibm.com mail is handled by 10 e4.ny.us.ibm.com.
ibm.com mail is handled by 10 e5.ny.us.ibm.com.
ibm.com mail is handled by 10 e6.ny.us.ibm.com.
ibm.com mail is handled by 10 e31.co.us.ibm.com.
ibm.com mail is handled by 10 e32.co.us.ibm.com.
ibm.com mail is handled by 10 e33.co.us.ibm.com.
ibm.com mail is handled by 10 e34.co.us.ibm.com.
ibm.com mail is handled by 10 e35.co.us.ibm.com.
ibm.com mail is handled by 10 e1.ny.us.ibm.com.
ibm.com mail is handled by 10 e2.ny.us.ibm.com.
ibm.com mail is handled by 10 e3.ny.us.ibm.com.

Мой od вывод:

0000000 696d 7263 736f 666f 2e74 6f63 0a6d 6f67
          m   i   c   r   o   s   o   f   t   .   c   o   m  \n   g   o
        155 151 143 162 157 163 157 146 164 056 143 157 155 012 147 157
0000020 676f 656c 632e 6d6f 690a 6d62 632e 6d6f
          o   g   l   e   .   c   o   m  \n   i   b   m   .   c   o   m
        157 147 154 145 056 143 157 155 012 151 142 155 056 143 157 155
0000040 000a
         \n  \0
        012 000
0000041

Посмотрите на вывод od для вашего файла и посмотрите, есть ли что-нибудь до символов \n.

Обновление:

Из вашего комментария видно, что ваш файл был создан под DOS / Windows, так как он имеет конец строки CR / LF. Используйте это как скрипт, чтобы сначала удалить символы CR:

#!/bin/sh
for j in `cat a.txt`
do
    i=`echo $j | sed 's/\r//g'`
    echo $i
    host $i
done
2 голосов
/ 13 июля 2009

\ 013 означает, что у вас есть возврат каретки в конце имени вашего хоста. Удалите его (например, используя что-то вроде tr -d '\r') перед передачей имени хоста в 'host'.

Попробуйте изменить:

for i in `cat a.txt`

до:

for i in `cat a.txt | tr -d '\r'`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...