重定向命令其實用得不少吧,只是重來都沒有仔細看過,這波正好又用到 又有空總結一波。
先看>和>>:
他們倆其實唯一的區別就是>是重定向到一個文件,>>是追加內容到文件。兩個命令都是如果文件不存在則創建文件。舉個例子來看看:
可以看到可以將ll的輸出 重定向到123.txt中, >也是同樣的效果。只是如果使用>執行重定向的位置沒有這個文件
但是如果你重定向的是沒有的文件夾里面的文件,那么文件夾他是不會幫你創建的,所以會報出錯誤,這點要注意。
然后是 1>、 2>、 1>>、 2>>的使用,
當我們需要把一個文件正確的輸出,和錯誤的輸出分開保存的時候就能用到他們啦。讓我用一個簡單的python腳本來做一個實驗
python腳本如下
該腳本會正確執打印gogogog 然后 報出下面強轉的錯誤。
可以看到,正確的輸出被保存進了right.txt 而錯誤的輸出被重定向到了wrong.txt 。
那么如果我們不區分1>2>這樣的重定向規則,運行結果會被保存成什么樣子呢?
可以看到只保存了正確的結果,錯誤的信息被打印到標准輸出上面。
那如果我們想讓錯誤和正確的結果都被重定向到同一個文件又應該怎么做呢。
可以看到,我們將錯誤也重定向到和1相同的文件 就實現了這個需求。
同理1>> 2>>其實也就是追加數據到文件中,和前面介紹的> >>沒有什么不同,需要提到的一點是,如果我們想將錯誤的和正確的信息重定向追加到同一個文件應該怎么做呢?你可能會想到2>>&1。。。然而現實是,並沒有這個語法。
然而我們卻可以使用1>>pp.txt 2>&1的語法實現這個功能
可見看似1> 1>> 2> 2>>是相一一對應的,但是其實不是,他們可以混用,比方說正確的結果想追加,錯誤的結果我想覆蓋。
類似這種組合混用的情況,相對來說也不少見。也可以看出重定向標識的靈活性。
那么如果我們想保存正確的結果,錯誤的結果直接丟向垃圾站,既不保存為文件,也不在標准輸出打印又該怎么做呢?
直接將錯誤輸出重定向到/dev/null 就好了,他就像一個無底洞,丟進去的東西就不見了。
那么<又是什么意思呢?<可以將原本由標准輸入改為由指定地方輸入舉個例子就明白了:
靈活使用重定向標識符 將極大方便我們日常對系統的操作,和靈活控制腳本的運作,所以一定要掌握喲!