Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix脚本,尝试运行主机,获取;013未找到:3(NXDOMAIN)";_Unix_Shell - Fatal编程技术网

Unix脚本,尝试运行主机,获取;013未找到:3(NXDOMAIN)";

Unix脚本,尝试运行主机,获取;013未找到:3(NXDOMAIN)";,unix,shell,Unix,Shell,我有一个文本文件,a.txt。内容包括: $ cat a.txt microsoft.com google.com ibm.com 我试图在每一行上运行一个host命令来获取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.c

我有一个文本文件,a.txt。内容包括:

$ cat a.txt
microsoft.com
google.com
ibm.com
我试图在每一行上运行一个host命令来获取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

您的文件中有一些有趣的字符(在每行末尾)。做:

然后把结果贴在这里。文件可能来自另一个系统(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

文件中有一些有趣的字符(在每行末尾)。做:

然后把结果贴在这里。文件可能来自另一个系统(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

\013表示主机名末尾有回车符。在将主机名传递给“
host
”之前,先将其剥离(例如,使用类似于
tr-d'\r'
”的方法)

尝试更改:

for i in `cat a.txt`
致:


\013表示主机名末尾有回车符。在将主机名传递给“
host
”之前,先将其剥离(例如,使用类似于
tr-d'\r'
”的方法)

尝试更改:

for i in `cat a.txt`
致:


谢谢你令人难以置信的快速反应---结果--$od-xcb a.txt 0000000 696d 7263 736f 666f 2e74 6f63 0d6d 670a m i c r o s o f t。c o m\r\n g 155 151 143 162 157 163 157 146 164 056 143 157 155 015 012 147 00000 20 6f6f 6c67 2e65 6f63 0d6d 690a 6d62 632e o g l e。c o m\r\n我是b m。c 157 147 154 145 056 143 157 155 015 012 151 142 155 056 143 00000 40 6d6f 0a0d o m\r\n 157 155 015 0120000044@Pax:13 in decimal是一个CR。13 in八进制(即decimal 11)是一个垂直制表符。对不起,我不知道如何用代码格式包装答案。我知道@Brandon,但错误消息指示\013,这通常是一个八进制数@chrisc,该文件是在DOS/Windows下创建的。使用dos2unix或sed的/\r/'进行转换。感谢您令人难以置信的快速响应---结果--$od-xcb a.txt 0000000 696d 7263 736f 666f 2e74 6f63 0d6d 670a m i c r o s o f t。c o m\r\n g 155 151 143 162 157 163 157 146 164 056 143 157 155 015 012 147 00000 20 6f6f 6c67 2e65 6f63 0d6d 690a 6d62 632e o g l e。c o m\r\n我是b m。c 157 147 154 145 056 143 157 155 015 012 151 142 155 056 143 00000 40 6d6f 0a0d o m\r\n 157 155 015 0120000044@Pax:13 in decimal是一个CR。13 in八进制(即decimal 11)是一个垂直制表符。对不起,我不知道如何用代码格式包装答案。我知道@Brandon,但错误消息指示\013,这通常是一个八进制数@chrisc,该文件是在DOS/Windows下创建的。使用dos2unix或sed的/\r/'进行转换。是的,这很有效!!我从一个xml文件中获取了a.txt文件。非常感谢大家!是的,成功了!!我从一个xml文件中获取了a.txt文件。非常感谢大家!