最近學校的網比較搓,DNS天天掛,出口帶寬天天堵,NAT后的總出口帶寬也才4MB/s(來源:360測速),唉,不親身體會鬼才知道一堆人共享這個帶寬是什么感覺。
廢話不多說了,在Unix下重定向用著感覺很high,現在想把win下的nslookup的錯誤提示“*** Can't find server name for address 10.3.9.5: Non-existent domain”一同導出到txt文件,搜了下,嗯,遂有此文。
再說句廢話,windows這是赤裸裸的抄襲啊,stdio(0),stdout(1),stderr(2)都跟unix是一樣的
重定向符號主要有:>,>>,<,>&,<&和|,以下只有前五個的介紹,最后一個是管道,與Unix亦完全一致。
第一節
首先從一個經典問題開始,“1>nul 2>nul”的意思是既屏蔽正常的輸出又屏蔽錯誤的輸出,那么我們馬上就知道了這里的1表示正常輸出(即所謂的“標準輸出”--stdout),2表示錯誤輸出(即所謂的“標準錯誤輸出”--stderr)。
1和2其實是句柄stdout和stderr的數字代號,至于什么是句柄,我認為可以理解為某種事物的一種標識,或者說這個句柄指向某個事物。舉個例子來說,“標準輸出”以句柄stdout為標識,或者說句柄stdout指向“標準輸出”。
還有一個句柄--stdin,它是所謂“標準輸入”的標識,數字代號是0。除此之外還有3~9可用,只是它們沒有定義。
“標準輸出”和“標準錯誤輸出”默認是要輸出到控制臺con(即cmd窗口)的,而“標準輸入”默認是由控制臺con(即鍵盤)輸入的,因此重定向的目的就是將輸入輸出流從默認位置重定向到新的位置。符號“>”和“>>”的默認句柄代號是1,而“<”的默認句柄代號是0。
“echo hhhhhh”類似于這樣的語句可以說是我們再熟悉不過的了,但這只是種默認的狀態,其實里面還有一些內容。這一句完整的應該是這樣的:“echo hhhhhh 1>con 2>con”,意思是將echo命令的結果中的標準輸出和標準錯誤輸出輸出到控制臺con中,只不過此時標準錯誤輸出是空的。
再看一個例子,如果給dir一個錯誤的參數,例如“dir /mm”,那么寫全了就是“dir /mm 1>con 2>con”,只不過此時的標準輸出是空的。如果你這樣寫的話“dir /mm 1>hero.txt”,那么屏幕上會照常顯示錯誤信息但hero.txt中不會有內容。
再來一個標準輸入的例子,“set /p var= ”其實應該是這樣的“set /p var= 0<con”,只是因為0<con是默認值可以省略。我們當然可以從文件中讀取輸入,如“set /p var= 0<file.txt”,0是默認值可以省略。
nul代表的是“空設備”,是一個不存在的設備,將輸出流重定向到空設備就相當于屏蔽掉了一樣。而如果從空設備中讀取輸入,自然是讀不到東西的,但的確是輸入了,這也就是“set /p var=<nul”中“<nul”相當于回車但不換行的原因。
新聞熱點
疑難解答