2016-04-28 68 views
0

如果我做LS -la,我得到這樣差B/W LS -la和ls -la> LS-1.txt的

total 16 
drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . 
drwx------+ 23 rockse staff 782 Apr 28 16:48 .. 
-rw-r--r-- 1 rockse staff 32 Apr 28 16:49 1.sh 
-rw-r--r-- 1 rockse staff 215 Apr 28 17:01 ls-1.txt 

結果,但如果我這樣做LS -la> LS-1。 TXT,我得到這個

total 8 
drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . 
drwx------+ 23 rockse staff 782 Apr 28 16:48 .. 
-rw-r--r-- 1 rockse staff 32 Apr 28 16:49 1.sh 
-rw-r--r-- 1 rockse staff 0 Apr 28 17:06 ls-1.txt 

我明白,一個文件被創建,然後ls -la寫入相同的,但爲什麼沒有創建文件,因爲我們只是寫標準輸出到前拍攝的ls -la快照檔案?

回答

1

重定向是由shell完成的,而不是你正在運行的程序。通過實現這個外殼進行的處理與此類似(簡化):

  1. 叉子進程
  2. 打開輸出文件
  3. 連接stdout到輸出文件流
  4. 執行程序

步驟2創建該文件,所以當該程序在步驟運行時,它將是可見4.

如果步驟2在步驟4之後完成,則不可能將程序的stdout更改爲指向它。