shell中可能經(jīng)常能看到:>/dev/null 2>&1
命令的結(jié)果可以通過(guò)%>的形式來(lái)定義輸出
/dev/null 代表空設(shè)備文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout標(biāo)準(zhǔn)輸出,系統(tǒng)默認(rèn)值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr標(biāo)準(zhǔn)錯(cuò)誤
& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1
那么本文標(biāo)題的語(yǔ)句:
1>/dev/null 首先表示標(biāo)準(zhǔn)輸出重定向到空設(shè)備文件,也就是不輸出任何信息到終端,說(shuō)白了就是不顯示任何信息。
2>&1 接著,標(biāo)準(zhǔn)錯(cuò)誤輸出重定向等同于 標(biāo)準(zhǔn)輸出,因?yàn)橹皹?biāo)準(zhǔn)輸出已經(jīng)重定向到了空設(shè)備文件,所以標(biāo)準(zhǔn)錯(cuò)誤輸出也重定向到空設(shè)備文件。
A. 1> /dev/null 表示將命令的標(biāo)準(zhǔn)輸出重定向到 /dev/null2>/dev/null 表示將命令的錯(cuò)誤輸出重定向到 /dev/null1 - denotes stdout ( standard output )2 - denotes stderr ( standard error )/dev/null就相當(dāng)與windows里的回收站,只是進(jìn)去了不能再出來(lái)了。>/dev/null 就是將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò)的信息屏蔽不顯示
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
我們經(jīng)常會(huì)在UNIX系統(tǒng)下的一些腳本中看到類似”2>&1″這樣的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具體含義是什么呢?
UNIX有幾種輸入輸出流,它們分別與幾個(gè)數(shù)字有如下的對(duì)應(yīng)關(guān)系:0-標(biāo)準(zhǔn)輸入流(stdin),1-標(biāo)準(zhǔn)輸出流(stdout),2-標(biāo)準(zhǔn)錯(cuò)誤流(stderr)。”2>&1″的意思就是將stderr重定向至stdout,并一起在屏幕上顯示出來(lái)。如果不加數(shù)字,那么默認(rèn)的重定向動(dòng)作是針對(duì)stdout(1)的,比如”ls -l > result”就等價(jià)于”ls -l 1 > result”。這樣便于我們更普遍性的理解重定向過(guò)程。
下面舉例說(shuō)明:
#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
第一條命令的輸出結(jié)果是stderr,因?yàn)閟tdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍將在屏幕中顯示出來(lái);第二條命令無(wú)輸出,因?yàn)楫?dāng)stdout重定向至/dev/null后,stderr又重定向到了stdout,這樣stderr也被輸出到了/dev/null。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。