看板 PangSir 關於我們 聯絡資訊
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.128