发信人"错过与等待" <..@.....>,
看板FreeBSD
标 题Re: [问题]对不起,请问 2>&1 是什麽意思?
发信站DCI HiNet (Thu Dec 19 21:17:09 2002)
转信站Ptt!news.ntu!spring!news.nctu!netnews.eranet.net!news.ttn.net!netnews.
我用两个例子来简单说明一下
或许你就可以明白了
你先写一个 test1.sh 内容如下:
#!/bin/sh
echo "TEST1" >&1
echo "TEST2" >&2
先用 sh test1.sh 执行看看
再用 sh test1.sh >/dev/null 执行看看
你会发现如果是输出到 stderr (>&2) 不会因为你使用了 >/dev/null 而隐藏
因为系统原始的设计就是希望错误可以让使用者发现
因此不会因为你重新导向到 >/dev/null 而消失
你先写一个 test2.sh 内容如下:
#!/bin/sh
telnet badhostname
先用 sh test2.sh 执行看看
再用 sh test2.sh >/dev/null 执行看看
你会发现错误讯息都会出现
因为TELNET内部的程式设计就是把讯息送到 >&2
再修改一下成为以下的内容
#!/bin/sh
telnet badhostname 2>&1
再用 sh test2.sh >/dev/null 执行看看
你会发现可以隐藏讯息了
因为 telnet badhostname 2>&1
中的 2>&1 把错误讯息 >&2 导向到 >&1 了
而 >&1 会因为你的 >/dev/null 而消失
crontab 中的程式也会像 TELNET 一样
发生错误时是导向到 stderr (>&2)
不会因为你使用了 >/dev/null 而隐藏
因此crontab 执行时都会产生错误的输入而寄出MAIL
要 crontab 安静
就是要加上 2>&1 才能真的安静了
"背着错误过生活" <
[email protected]> 撰写於邮件新闻
:
[email protected]...
> 只好硬着头皮问了,
> 我还是看不懂这是什麽意思?
>
> %ls -al /dev/std*
> crw-rw-rw- 1 root wheel 22, 2 12 19 03:11 /dev/stderr
> ^^^
> crw-rw-rw- 1 root wheel 22, 0 12 12 11:01 /dev/stdin
> crw-rw-rw- 1 root wheel 22, 1 12 19 11:37 /dev/stdout
> ^^^
> 2>&1 跟这两个东西有关吗?
> --
> ※ Origin: 云林科技大学蓝天使 <bbs.yuntech.edu.tw> [From:
163.27.227.129]