shell中可能經常能看到:>/dev/null 2>&1
?
命令的結果可以通過%>的形式來定義輸出 ?
/dev/null 代表空設備文件 ?
> 代表重定向到哪里,例如:echo "123" > /home/123.txt ?
1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同于"1>/dev/null" ?
2 表示stderr標準錯誤 ?
& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1 ?
那么本文標題的語句: ?
1>/dev/null 首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。 ?
2>&1 接著,標準錯誤輸出重定向等同于 標準輸出,因為之前標準輸出已經重定向到了空設備文件,所以標準錯誤輸出也重定向到空設備文件。 ?
A. 1> /dev/null 表示將命令的標準輸出重定向到 /dev/null2>/dev/null 表示將命令的錯誤輸出重定向到 /dev/null1 - denotes stdout ( standard output )2 - denotes stderr? ( standard error )/dev/null就相當與windows里的回收站,只是進去了不能再出來了。>/dev/null 就是將標準輸出和標準出錯的信息屏蔽不顯示 ?
B.>/dev/null 2>&1?? also can write? as? 1>/dev/null 2>&1???? - stdout redirect to /dev/null (no stdout) ,and redirect stderr to stdout? (stderr gone as well) . end up it turns both stderr and stdout off ?
C.a little practice may help to undstand above .? #ls /usr? /nothing #ls /usr? /nothing? 2>/dev/null #ls /usr? /nothing? >/dev/null 2>&1 ?
我們經常會在UNIX系統下的一些腳本中看到類似”2>&1″這樣的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具體含義是什么呢? ?
UNIX有幾種輸入輸出流,它們分別與幾個數字有如下的對應關系:0-標準輸入流(stdin),1-標準輸出流(stdout),2-標準錯誤流 (stderr)。”2>&1″的意思就是將stderr重定向至stdout,并一起在屏幕上顯示出來。如果不加數字,那么默認的重定向動作是針對stdout(1)的,比如”ls -l > result”就等價于”ls -l 1 > result”。這樣便于我們更普遍性的理解重定向過程。 ?
下面舉例說明: ?
#cat std.sh ?
#!/bin/sh ?
echo “stdout” ?
echo “stderr” >&2 ?
#/bin/sh std.sh 2>&1 > /dev/null ?
stderr ?
#/bin/sh std.sh > /dev/null 2>&1 ?
第一條命令的輸出結果是stderr,因為stdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍將在屏幕中顯示出來;第二條命令無輸出,因為當stdout重定向至/dev/null后,stderr又重定向到了stdout,這樣stderr也被輸出到了/dev/null。 ?
命令的結果可以通過%>的形式來定義輸出 ?
/dev/null 代表空設備文件 ?
> 代表重定向到哪里,例如:echo "123" > /home/123.txt ?
1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同于"1>/dev/null" ?
2 表示stderr標準錯誤 ?
& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1 ?
那么本文標題的語句: ?
1>/dev/null 首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。 ?
2>&1 接著,標準錯誤輸出重定向等同于 標準輸出,因為之前標準輸出已經重定向到了空設備文件,所以標準錯誤輸出也重定向到空設備文件。 ?
A. 1> /dev/null 表示將命令的標準輸出重定向到 /dev/null2>/dev/null 表示將命令的錯誤輸出重定向到 /dev/null1 - denotes stdout ( standard output )2 - denotes stderr? ( standard error )/dev/null就相當與windows里的回收站,只是進去了不能再出來了。>/dev/null 就是將標準輸出和標準出錯的信息屏蔽不顯示 ?
B.>/dev/null 2>&1?? also can write? as? 1>/dev/null 2>&1???? - stdout redirect to /dev/null (no stdout) ,and redirect stderr to stdout? (stderr gone as well) . end up it turns both stderr and stdout off ?
C.a little practice may help to undstand above .? #ls /usr? /nothing #ls /usr? /nothing? 2>/dev/null #ls /usr? /nothing? >/dev/null 2>&1 ?
我們經常會在UNIX系統下的一些腳本中看到類似”2>&1″這樣的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具體含義是什么呢? ?
UNIX有幾種輸入輸出流,它們分別與幾個數字有如下的對應關系:0-標準輸入流(stdin),1-標準輸出流(stdout),2-標準錯誤流 (stderr)。”2>&1″的意思就是將stderr重定向至stdout,并一起在屏幕上顯示出來。如果不加數字,那么默認的重定向動作是針對stdout(1)的,比如”ls -l > result”就等價于”ls -l 1 > result”。這樣便于我們更普遍性的理解重定向過程。 ?
下面舉例說明: ?
#cat std.sh ?
#!/bin/sh ?
echo “stdout” ?
echo “stderr” >&2 ?
#/bin/sh std.sh 2>&1 > /dev/null ?
stderr ?
#/bin/sh std.sh > /dev/null 2>&1 ?
第一條命令的輸出結果是stderr,因為stdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍將在屏幕中顯示出來;第二條命令無輸出,因為當stdout重定向至/dev/null后,stderr又重定向到了stdout,這樣stderr也被輸出到了/dev/null。 ?