熟悉幾個特殊符號:python
< :輸入重定向 > :輸出重定向 >> :輸出重定向,進行追加,不會覆蓋以前內容 << :標準輸入來自命令行的一對分隔號的中間內容.
示例:shell
1.cat >file 記錄的是鍵盤輸入,至關於從鍵盤建立文件,而且只能建立新文件,不能編輯已有文件.>是數據重導向,會將你輸入的文本內容輸出到file中. cat >file < 兩條命令結合起來使用,既記錄了鍵盤輸入內容,同時又規定告終束符號以內的內容的範圍 xargs -n 1 < qqq <<EOF就是告訴shell腳本如今開始執行命令,當遇到EOF的時候結束命令。 !跟命令指上一次的命令
而後是 1>、 2>、 1>>、 2>>的使用,命令行
當咱們須要把一個文件正確的輸出,和錯誤的輸出分開保存的時候就能用到他們啦。讓我用一個簡單的python腳原本作一個實驗code
if __name__ == '__main__': print 'gogogog' int('qiowjeioqwjeo') (thrift_rpc)piperck➜ py_pra ᐅ python pp.py 1> right.txt 2> wrong.txt (thrift_rpc)piperck➜ py_pra ᐅ ls NS8A_client gevent pp.py starcraft2 baidu_phoneassist laplace_pra right.txt wrong.txt (thrift_rpc)piperck➜ py_pra ᐅ cat right.txt gogogog (thrift_rpc)piperck➜ py_pra ᐅ cat wrong.txt Traceback (most recent call last): File "pp.py", line 6, in <module> int('qiowjeioqwjeo') ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
能夠看到,正確的輸出被保存進了right.txt 而錯誤的輸出被重定向到了wrong.txt 。ip
那麼若是咱們不區分1>2>這樣的重定向規則,運行結果會被保存成什麼樣子呢?rpc
[root@hbl_test houbinglei]# python test.py > log.txt Traceback (most recent call last): File "test.py", line 4, in <module> func() File "test.py", line 3, in func int("abc") ValueError: invalid literal for int() with base 10: 'abc' [root@hbl_test houbinglei]# cat log.txt 111
那若是咱們想讓錯誤和正確的結果都被重定向到同一個文件又應該怎麼作呢。it
[root@hbl_test houbinglei]# python test.py 1 > log.txt 2>&1 [root@hbl_test houbinglei]# cat log.txt 111 Traceback (most recent call last): File "test.py", line 4, in <module> func() File "test.py", line 3, in func int("abc") ValueError: invalid literal for int() with base 10: 'abc'
若是咱們想將錯誤的和正確的信息重定向追加到同一個文件應該怎麼作呢?你可能會想到2>>&1。。。然而現實是,並無這個語法。pip
然而咱們卻能夠使用1>>pp.txt 2>&1的語法實現這個功能io
echo "asd" &>> a.txt &>>就是1跟2 都輸入到a.txtevent
(thrift_rpc)piperck➜ py_pra ᐅ python pp.py 1>> pp.txt 2>&1 (thrift_rpc)piperck➜ py_pra ᐅ cat pp.txt gogogog gogogog Traceback (most recent call last): File "pp.py", line 6, in <module> int('qiowjeioqwjeo') ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo' gogogog Traceback (most recent call last): File "pp.py", line 6, in <module> int('qiowjeioqwjeo') ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
那麼若是咱們想保存正確的結果,錯誤的結果直接丟向垃圾站,既不保存爲文件,也不在標準輸出打印又該怎麼作呢?
(thrift_rpc)piperck➜ py_pra ᐅ python pp.py 1>>right.txt 2>/dev/null (thrift_rpc)piperck➜ py_pra ᐅ cat right.txt gogogog gogogog gogogog