2013年1月23日

IO redirection and pipline

Q1.1:cat file >file
Q1.2:cat file
Q1.3:cat >file


A1.1:命令報錯(cat: file: input file is output file),file變成空的
A1.2:命令成功運行($?=0),但是file變成空的
A1.3:無限loop! file的內容被無限循環的輸出到file本身


這三個問題,貌似好像沒啥了不起,可是仔細看好像不大對勁,首先file真的是指同一個file,一般來說,一般人不會把輸入跟輸出設定成一樣

cat < file就已經算是少人會使用的了,man cat,得到開頭


DESCRIPTION
       Concatenate FILE(s), or standard input, to standard output.

簡單的說,就是接受檔案或者stdin都可以,然後輸出到stdout,直白

那為何file會變成空的?內容都不見了!?
Q1.1 因為cat偵測到這件事情,所以直接跳出,當然輸出是空白(用echo $?檢查)
Q1.2 答案或許出乎意料的簡單,shell通常先處理output,再來處理input  :)~ 所以讀入空白,放到file,跟著讀進空白檔案
Q1.3 因為輸出後再讀入

小小一個簡單的IO redirection就可以把人搞死orz,雖然說好像沒有很重要,但是惡魔往往藏在細節內

沒有留言: