2009年5月21日 星期四

/dev/null 2>&1 是什麼?

常有人問到 /dev/null 2>&1是什麼意思?

簡單說,/dev/null (often called the bit-bucket) 是系統中的black hole
任何被導到這裡的東西都直接莎呦哪拉,不會被系統處理

再來,program通常都有輸入和輸出
輸入通常是standard input(STDIN),可能是鍵盤的輸入或是另一個program的output
輸出通常指的是print to standard output(STDOUT),有時候也會需要print to standard error(STDERR)

如果不是用名字來稱呼,他們也有各自的數字來代表他們:
  • 0 代表 STDIN
  • 1 代表 STDOUT
  • 2 代表 STDERR
如果你在使用上沒有特別指定,default指的是STDOUT

所以
假設今天你輸入了一行指令叫
./my_program > /dev/null 2>&1

這個意思是
my_program這支程式所產生的STDOUT會被導到/dev/null,也就是不會出現在螢幕上
然後STDERR(2)會被導到STDOUT,STDOUT又導到block hole,所以也一樣不會出現在螢幕上

用一句簡短的話來作結論,這個用法就是用來...."把你的output訊息通通丟到黑洞裡!"

PS. That’s one good way to make a program be really quiet!

沒有留言:

張貼留言