天天看點

【Linux】資料流重導向(後篇)

  1)/dev/null 垃圾桶黑洞裝置與特殊寫法

  想象一下,如果我知道錯誤資訊會發生,是以要将錯誤資訊忽略掉而不顯示或儲存呢?

這個時候黑洞裝置 /dev/null 就很重要了!這個 /dev/null

可以吃掉任何導向這個裝置的資訊喔!将上述的範例修訂一下:

  再想象一下,如果我要将正确與錯誤資料通通寫入同一個檔案去呢?這個時候就得要使用特殊的寫法了!

我們同樣用底下的案例來說明:

  上述表格第一行錯誤的原因是,由于兩股資料同時寫入一個檔案,又沒有使用特殊的文法,

此時兩股資料可能會交叉寫入該檔案内,造成次序的錯亂。是以雖然最終 list

檔案還是會産生,但是裡面的資料排列就會怪怪的,而不是原本螢幕上的輸出排序。 至于寫入同一個檔案的特殊文法如上表所示,你可以使用 2>&1

也可以使用 &> ! 

  2)standard input

: < 與 <<

  了解了 stderr 與 stdout

後,那麼那個 < 又是什麼呀?呵呵!以最簡單的說法來說, 那就是『将原本需要由鍵盤輸入的資料,改由檔案内容來取代』的意思。 我們先由底下的 cat

指令操作來了解一下什麼叫做『鍵盤輸入』吧!

  由于加入 > 在 cat 後,是以那個 catfile 會被主動的建立,而内容就是剛剛鍵盤上面輸入的那兩行資料了。

唔!那我能不能用純文字檔案取代鍵盤的輸入,也就是說,用某個檔案的内容來取代鍵盤的敲擊呢? 可以的!如下所示:

  這東西非常的有幫助!尤其是用在類似 mail 這種指令的使用上。

了解 < 之後,再來則是怪可怕一把的 << 這個連續兩個小于的符号了。 他代表的是『結束的輸入字元』的意思!舉例來講:『我要用

cat 直接将輸入的資訊輸出到 catfile 中, 且當由鍵盤輸入 eof 時,該次輸入就結束』,那我可以這樣做:

  看到了嗎?利用 << 右側的控制字元,我們可以終止一次輸入, 而不必輸入 [crtl]+d

來結束哩!這對程式寫作很有幫助喔!好了,那麼為何要使用指令輸出重導向呢?我們來說一說吧!

螢幕輸出的資訊很重要,而且我們需要将他存下來的時候;

背景運作中的程式,不希望他幹擾螢幕正常的輸出結果時;

一些系統的例行指令 (例如寫在 /etc/crontab 中的檔案) 的運作結果,希望他可以存下來時;

一些運作指令的可能已知錯誤資訊時,想以『 2> /dev/null 』将他丢掉時;

錯誤資訊與正确資訊需要分别輸出時。

  當然還有很多的功能的,最簡單的就是常常問到的:『為何我的 root 都會收到系統 crontab

寄來的錯誤資訊呢』這個咚咚是常見的錯誤, 而如果我們已經知道這個錯誤資訊是可以忽略的時候,嗯!『 2> errorfile

』這個功能就很重要了吧! 了解了嗎?

  參考資料: