※ 引述《q82419 (q82419)》之銘言:
: 1.想請問這種情形:
: $ cat test.txt |2
: $ ls > test.txt
: $ cat
: 第一個cmd的結果要pipe進第三個cmd的input
: 可是第二個cmd把ls的結果output到test.txt
: 那第三個cmd出來的結果會是ls的output還是原本的test.txt?
: 意思是,
: $ cat test.txt |2 (cmd1) $
: $ ls > test.txt (cmd2) 跟 $ ls > test.txt 是否相等?
: $ cat (cmd3) $ cat test.txt
: (往後pipe的command是否能在需要他的output時再exec?)
每一行的cmd在該行就會執行
故以同學的例子來說
第三行cmd出來的結果還是原本的test.txt
: 2.如果cat grep沒有給file name的話是從stdin輸入
: 假設在cat前沒有任何一個command的stdout pipe到cat的stdin
: 那要怎麼處理?從client read?
不會出現無限等待 client input 測資
也就是可能會有
%cat "test.txt" | grep s
但不會單獨只有
%grep s
: 3.之前助教回答,若一行中有任何的command錯誤,則該行放棄
: $ cat test.txt |2 (cmd1)
: $ 123456789 (cmd2) (wrong)
: $ cat (cmd3)
: $ cat (cmd4)
: 如果有要pipe到後面的command,在圖中遇到錯誤的command如上,
: 那是cmd3的cat還是cmd4的cat接到cmd1的output?
: (錯誤的command是否直接跳過不影響pipe?)
錯誤的cmd行數照算
故以同學的例子來說
是cmd3的cat接到cmd1的output
: 4. printenv, setenv的指令
: 是否是單獨指令,不會跟pipe有關?
: $ cat test.txt | printenv(setenv PATH)
: $ printenv(setenv PATH) |2
: 這兩種情形是否能直接判斷為不合法?
: $ cat test.txt |1
: $ printenv(setenv PATH)
: 是否不用理會cat的output直接做printenv或setenv?
我們假設 printenv, setenv的指令會忽略 stdin 的內容
這部份你可以到工作站去試試像 echo "dsfgds" | ls 這樣的指令
shell 給你的結果跟單獨 ls 有何不同
就會知道該如何處理
: 5.
: 考慮到一次將結果送回client,
: 如果檔案太大buffer設不夠多的話會overflow
: 檔案大小是否有一個確切的限制?
: 或者有除了一次送回結果以外建議的處理方式?
: 謝謝
測試文字檔案大小不會超過 2048 bytes
但請注意一個指令最多可能會要求印出十個檔案的內容
TA