在posix shell中,命令的結果可以通過%>;的形式來定義(其中%表示檔案描 述符:1為標準輸出stdout、2為標準錯誤stderr)!系統預設%值是1,也就是1>;,而1>;可以簡寫為》;,也就是預設 為》;。而stdout的預設目標是終端(這點不用驗證吧)。另外,stderr的預設目標我個人認為也是終端,比如:
#abcddcba
sh: abcddcba: not found.
錯誤資訊顯示在終端上(對於telnet、dtterm等,那就說虛擬終端了)。
**********====實驗環境**********====
#mkdir redtest
#cd redtest
#mkdir a4
#touch a1 a2 a3
**********====簡單試驗**********====
#ls >;redout.lst (等同於ls 1>;redout.lst,標準輸出重定向)
系統先執行》;redout.lst,生成乙個空檔案,然後系統執行ls,再把結果重定向到redout.lst。這時在終端看不到任何資訊,但是#more redout.lst可以看到a1、a2、a3、a4和redout.lst。
#./ourgame 2>;rederr.lst (標準錯誤重定向)
因為系統找不到執行指令碼ourgame,產生錯誤,但並不是顯示在終端上,而是把錯誤資訊重定向到了rederr.lst。
#more rederr.lst
sh: ourgame: not found.
**********====組合試驗**********====
#rm rederr.lst
#rm redout.lst
#vi conj
#!/usr/bin/sh
#email:[email protected]
for fn in `ls`
doif [[ -f $fn ]]
then
echo $fn
else
cp $fn $fn.new
fidone
//conj的作用是執行以後產生標準輸出(echo)和標準錯誤(cp)
#chmod 755 conj
看看一下命令的結果:
#./conj
a1 //stdout
a2 //stdout
a3 //stdout
cp: a4: is a directory. need "-r" option.//stderr
conj //stdout
再試試重定向的結果:
(1)、輸出重定向到檔案a1,終端上只能看到標準錯誤:
#./conj >;a1
#./conj 1>;a1
#more a1
a1a2
a3conj
(2)、錯誤重定向到檔案a1,終端上只能看到標準輸出:
#./conj 2>;a1
#more a1
cp: a4: is a directory. need "-r" option.
(3)、把標準輸出和標準錯誤都重定向到a1,終端上看不到任何資訊:
#./conf >;a1 2>;&1 (等同於#./conf 1>;a1 2>;&1)
#more a1
a1a2
a3cp: a4: is a directory. need "-r" option.
conj
//其中&的意思,可以看成是「the same as」、「與...一樣」的意思。本例中就是2>;和1>;一樣,都輸出到a1中。
再看乙個例子:
#./conj 2>;&1 >;a1
同樣可以解釋為2>;和1>;一樣,但是這時1>;是系統預設輸出到終端,所以標準錯誤也輸出到終端;然後,系統把標準輸出重定向到檔案a1。
記得unixpianpianmm有個問題:
echo "usage $0 -d" >;&2
那麼可以解釋為echo "usage $0 -d" 1>;&2
也就是把結果輸出到和標準錯誤一樣;之前如果有定義標準錯誤重定向到某log檔案,那麼標準輸出也重定向到這個log檔案。
以上指令碼在hp-ux11.00 l2000通過!所有定義、名詞均建立在本人的實踐和本人所了解的知識上,如有錯誤,請指正,謝謝!!!
關於重定向的問題
1.標準輸入的控制 語法 命令 檔案將檔案做為命令的輸入。例如 mail s mail test wesongzhou hotmail.com file1 將檔案file1 當做信件的內容,主 題名稱為mail test,送給收信人。2.標準輸出的控制 語法 命令 檔案將命令的執行結果送至指定的檔案...
詳細介紹linux重定向的使用
linux重定向是指修改原來預設的一些東西,對原來系統命令的預設執行方式進行改變,比如說簡單的我不想看到 在顯示器的輸出而是希望輸出到某一檔案中就可以通過linux重定向來進行這項工作。linux預設輸入是鍵盤,輸出是顯示器。你可以用重定向來改變這些設定。比如用wc命令的時候本來是要手動輸入一篇文本...
關於cmd命令的重定向輸出
jw72jw 命令通過 的形式來定向輸出,表示檔案描述符 1為標準輸出stdout,1 簡寫為 2為標準錯誤stderr。需要直接與重定向符號結合使用。比如 2 1表示stderr輸出到stdout 應用例項 將結果輸出到result.txt net stop myservices result 2...