iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

linux 能力upup系列 第 29

Day29 資料流重新導向II

昨天我們聊到可以將指令執行的結果導向到檔案裏面,那我們其實就可以利用這個特性,製作一個垃圾桶黑洞裝置,你看多好,還不用擔心滿了要自己清理XDD。那以下就是這個特殊裝置的寫法。

find /home -name .bashrc 2> /dev/null

重點是那個dev/null,這個東西可以吃掉任何導向它的資料。

在某些特殊情況下,我們需要將所有正確與錯誤資訊都寫入同一個檔案中,這個時候我們就需要特殊寫法了。相信有一部分朋友第一時間想到的都是以下這個寫法

find /home -name .bashrc >list 2> list

但是這個是有問題的,因為兩股資料同時寫入一個檔案,又沒有使用特殊語法,所以資料還是會交叉寫入檔案,這個狀況會導致次序的錯亂,雖然最後結果檔案會存在,但是裡面的次序會很奇怪。正確能夠達成目的的是以下這兩種寫法

find /home -name .bashrc >list 2>&1
find /home -name .bashrc &> list 

接下來要來介紹的是標準輸入的部分,昨天有提到符號的部分,分別是<跟<<。那<代表的是原本需要由鍵盤輸入的資料改為檔案內容取代。這個小東西其實非常的有幫助,例如用在類似mail這種指令的使用上。那<<代表的是結束的輸入字元,利用<<右側的控制字元我們可以終止一次輸入,不必輸入[ctrl]+d

最後來總結一下我們為什麼要用資料流重新導向

(1)螢幕輸出的資訊很重要,而且我們需要把資訊存下來的時候
(2)背景執行中的程式,不希望它干擾螢幕正常的輸出結果的時候
(3)一些系統的例行命令,希望它可以存下來時
(4)一些執行命令的可能已知錯誤訊息時,想以2>dev/null丟掉的時候
(5)錯誤訊息與正確訊息需要分別輸出時

以上就是本人介紹資料流重新導向的部分,如果有缺漏的部分,也麻煩大家多指教


上一篇
Day28 資料流重新導向I
下一篇
Day30 管線命令I
系列文
linux 能力upup30

尚未有邦友留言

立即登入留言