在shell執(zhí)行命令時,每個進程都和三個打開的文件相聯(lián)系,并使用文件描述符來引用這些文件。由于文件描述符不容易記憶,shell同時也給出了相應(yīng)的文件名:
文件&文件描述符
輸入文件—標(biāo)準(zhǔn)輸入
0(缺省是鍵盤,為0時是文件或者其他命令的輸出)輸出文件—標(biāo)準(zhǔn)輸出
1(缺省是屏幕,為1時是文件)錯誤輸出文件—標(biāo)準(zhǔn)錯誤
2(缺省是屏幕,為2時是文件)系統(tǒng)中實際上有12個文件描述符,我們可以任意使用文件描述符3到9.
文件重定向:改變程序運行的輸入來源和輸出地點
- 輸出重定向:
Command > filename
把標(biāo)準(zhǔn)輸出重定向到一個新文件中
Command >> filename
把標(biāo)準(zhǔn)輸出重定向到一個文件中(追加)
Command > filename
把標(biāo)準(zhǔn)輸出重定向到一個文件中
Command > filename 2>&1
把標(biāo)準(zhǔn)輸出和錯誤一起重定向到一個文件中
可以把2>&1理解為一個參數(shù)(2&1),為了轉(zhuǎn)義,&前加>
Command 2 > filename
把標(biāo)準(zhǔn)錯誤重定向到一個文件中
Command 2 >> filename
把標(biāo)準(zhǔn)輸出重定向到一個文件中(追加)
Command >> filename2>&1
把標(biāo)準(zhǔn)輸出和錯誤一起重定向到一個文件(追加)
- 輸入重定向:
Command < filename > filename2
Command命令以filename文件作為標(biāo)準(zhǔn)輸入,以filename2文件作為標(biāo)準(zhǔn)輸出
Command < filename
Command命令以filename文件作為標(biāo)準(zhǔn)輸入
Command << delimiter
從標(biāo)準(zhǔn)輸入中讀入,直到遇到delimiter分界符
綁定重定向
Command >&m
把標(biāo)準(zhǔn)輸出重定向到文件描述符m中
Command < &-
關(guān)閉標(biāo)準(zhǔn)輸入
Command 0>&-
同上
shell重定向的一些常用用法
- 重定向標(biāo)準(zhǔn)錯誤
例子1:command 2> /dev/null如果command執(zhí)行出錯,將錯誤的信息重定向到空設(shè)備
例子2:command > out.put 2>&1將command執(zhí)行的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤重定向到out.put(也就是說不管command執(zhí)行正確還是錯誤,輸出都打印到out.put)。 - 一般因為單元測試耗時時間長,我會選擇把測試過程后臺運行,并把結(jié)果放在一個特定的文件中
例如: nosetests tests/test_sys.py -v > ../nosetest.txt 2>&1
只需要回頭看那個文件結(jié)果即可
參考:
http://zqwt.012.blog.163.com/blog/static/1204468420103272857116/
http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html
http://blog.csdn.net/flowingflying/article/details/5201199