作者 主題: 關於stdout的一個疑問  (閱讀 6458 次)

0 會員 與 1 訪客 正在閱讀本文。

littlex

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
    • http://littlex.org
關於stdout的一個疑問
« 於: 2005-06-30 19:40 »
有一個疑惑想要請問大家
我以如下的步驟操作

bash-2.05b# pwd
/home/littlex/test

bash-2.05b# ls -l
total 4
-rw-r--r--  1 root root 28 Jun 30 19:33 123.txt

我的目錄中目前只有 123.txt 一個檔案
當我執行
bash-2.05b# ls -l 1> qqq.txt

將ls -l 的標準輸出導向至 qqq.txt
我原本的想法應該會在qqq.txt看到如上的結果,
也就是會

total 4
-rw-r--r--  1 root root 28 Jun 30 19:33 123.txt

只有123.txt

但結果確發現
bash-2.05b# more qqq.txt

total 4
-rw-r--r--  1 root root 28 Jun 30 19:33 123.txt
-rw-r--r--  1 root root  0 Jun 30 19:36 qqq.txt

它把qqq.txt也output到 qqq.txt這個file中
當我執行了 ls -l的時候,
qqq.txt這個檔案應該還沒有存在我的路徑中吧
是我那邊想錯了呢?
還煩請大家指點一下 :oops:

ericshei

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 2257
    • 檢視個人資料
Re: 關於stdout的一個疑問
« 回覆 #1 於: 2005-06-30 21:03 »
引述: "littlex"
有一個疑惑想要請問大家
我以如下的步驟操作

bash-2.05b# pwd
/home/littlex/test

bash-2.05b# ls -l
total 4
-rw-r--r--  1 root root 28 Jun 30 19:33 123.txt

我的目錄中目前只有 123.txt 一個檔案
當我執行
bash-2.05b# ls -l 1> qqq.txt

將ls -l 的標準輸出導向至 qqq.txt
我原本的想法應該會在qqq.txt看到如上的結果,
也就是會

total 4
-rw-r--r--  1 root root 28 Jun 30 19:33 123.txt

只有123.txt

但結果確發現
bash-2.05b# more qqq.txt

total 4
-rw-r--r--  1 root root 28 Jun 30 19:33 123.txt
-rw-r--r--  1 root root  0 Jun 30 19:36 qqq.txt

它把qqq.txt也output到 qqq.txt這個file中
當我執行了 ls -l的時候,
qqq.txt這個檔案應該還沒有存在我的路徑中吧
是我那邊想錯了呢?
還煩請大家指點一下 :oops:



您的用法沒有錯! qqq.txt會先被建立.因為stdout的目標檔必需先存在,ls -l的輸出才有地方寫進去.

littlex

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
    • http://littlex.org
關於stdout的一個疑問
« 回覆 #2 於: 2005-06-30 22:53 »
謝謝您!!
那我瞭解了 :)

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於stdout的一個疑問
« 回覆 #3 於: 2005-06-30 23:13 »
很好的問題與觀察!!

再來, 再多玩一個:
echo 1 > file.1
cat file.1
cat < file.1 > file.1
cat file.1

思考: 為何第二個 cat 看到的內容是空的?

thucop

  • 憂鬱的高中生
  • ***
  • 文章數: 148
    • 檢視個人資料
關於stdout的一個疑問
« 回覆 #4 於: 2005-07-01 08:45 »
引述: "netman"
很好的問題與觀察!!

再來, 再多玩一個:
echo 1 > file.1
cat file.1
cat < file.1 > file.1
cat file.1

思考: 為何第二個 cat 看到的內容是空的?


因為啊 最後面的 > file.1 會先進行產生一個空的 file1.1,
所以最後的 file.1 會是被清空的!!

大家可以試一下 假設 cat < file.1 >> file.1 會變成什麼?
滿好玩的!
~ 學無止境 ~~

thucop

  • 憂鬱的高中生
  • ***
  • 文章數: 148
    • 檢視個人資料
關於stdout的一個疑問
« 回覆 #5 於: 2005-07-01 08:50 »
引述: "thucop"
引述: "netman"
很好的問題與觀察!!

再來, 再多玩一個:
echo 1 > file.1
cat file.1
cat < file.1 > file.1
cat file.1

思考: 為何第二個 cat 看到的內容是空的?


因為啊 最後面的 > file.1 會先進行產生一個空的 file1.1,
所以最後的 file.1 會是被清空的!!

大家可以試一下 假設 cat < file.1 >> file.1 會變成什麼?
滿好玩的!


剛剛自己試了一下,
結果 cat file.1 >> file.1 是不能執行的命令!!
怪栽! cat < file.1 >> file.1 是可以執行的!
~ 學無止境 ~~

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於stdout的一個疑問
« 回覆 #6 於: 2005-07-01 12:01 »
是啊, 其實 I/O Redirection 是很複雜的學問呢...
不過, 初學的朋友, 先不用急著去鑽太深太尖.
先將基礎的 I/O 搞懂就行了.