Re: [問題]對不起,請問 2>&1 是什麼意思?
我用兩個例子來簡單說明一下
或許你就可以明白了
你先寫一個 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 才能真的安靜了
"背著錯誤過生活" <nego.bbs@bbs.yuntech.edu.tw> 撰寫於郵件新聞
:43kK14$rX8@bbs.yuntech.edu.tw...
> 只好硬著頭皮問了,
> 我還是看不懂這是什麼意思?
>
> %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]
FreeBSD 近期熱門文章
PTT數位生活區 即時熱門文章