看板 FreeBSD 關於我們 聯絡資訊
我用兩個例子來簡單說明一下 或許你就可以明白了 你先寫一個 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]