Re: [問題]對不起,請問 2>&1 是什麼意思?

看板FreeBSD作者時間22年前 (2002/12/19 21:47), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/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]
文章代碼(AID): #-0StS00 (FreeBSD)
文章代碼(AID): #-0StS00 (FreeBSD)