LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 967|回复: 6

请问两个这个语句的执行结果为何不同?

[复制链接]
发表于 2007-8-16 09:07:58 | 显示全部楼层 |阅读模式
源起:我想写一个脚本,让Linux 自动定时的去连接一台指定的Windows机器,看其3389(Terminal Service )服务是否工作正常?
1.echo | telnet 192.22.20.12 3389 | grep 'Connection closed by foreign host' > /dev/null 2>&1
2.echo | telnet 192.22.20.12 3389 2>&1 | grep 'Connection closed by foreign host'  > /dev/null 2>&1
请问这两句的话执行的结果为何不同?
如果此服务器工作正常,第1句的执行后,用
echo $?
返回值为1
而第2句执行后,用
echo $?
返回值为0
何解?
感谢!
发表于 2007-8-16 09:30:58 | 显示全部楼层
echo | telnet 192.22.20.12 3389 2>&1是把错误信息也包括了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-16 11:07:43 | 显示全部楼层
由于对这一块有点儿生:
对于以下两个:
echo | telnet 192.22.20.12 3389 2>&1
echo | telnet 192.22.20.12 3389
输出的结果为什么完全一样?
回复 支持 反对

使用道具 举报

发表于 2007-8-16 11:18:57 | 显示全部楼层
Post by jellychen
由于对这一块有点儿生:
对于以下两个:
echo | telnet 192.22.20.12 3389 2>&1
echo | telnet 192.22.20.12 3389
输出的结果为什么完全一样?

一般来说,标准输出与标准出错都是当前终端窗口。
因此,不论是否重定向,看到的输出结果是一样的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-16 11:29:25 | 显示全部楼层
对,就是因为知道这个,我才感觉到迷惑!
既然两个输出的都一样,对于这两句中后面的部分"| grep 'Connection closed by foreign host' > /dev/null 2>&1"的输入也是一样的.
因为前半部分的echo | telnet 192.22.20.12 3389和echo | telnet 192.22.20.12 3389 2>&1的输出是后者的输入.
那么结果为什么确不同?
回复 支持 反对

使用道具 举报

发表于 2007-8-16 15:43:08 | 显示全部楼层
因为这时的标准输出标准出错已经不是终端窗口了。
管道也是输入输出重定向。
“|“前面命令的标准输入与出错已被重定向为“|”后面命令的标准输入了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-16 16:28:57 | 显示全部楼层
感谢!还是不太理解!
我再理一下自己的思路!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表