任何人都可以告訴我區別嗎?例如:
如果我有一個文件a.txt
,內容如下:在linux中流水線和重定向的區別
一個
b
Ç
這將是對我來說cat a.txt | cat
和cat < a.txt
之間的區別他們都模擬STDIN,這是正確的,還是有區別?非常感謝。
任何人都可以告訴我區別嗎?例如:
如果我有一個文件a.txt
,內容如下:在linux中流水線和重定向的區別
一個
b
Ç
這將是對我來說cat a.txt | cat
和cat < a.txt
之間的區別他們都模擬STDIN,這是正確的,還是有區別?非常感謝。
管道從一個過程工作到另一個過程(第一個示例中的cat
s),因此需要兩個過程合作。重定向由shell本身處理。在shell中執行這些操作時可能很重要,例如working with variables。
這很好,謝謝。 – user685275 2011-04-28 11:08:33
重定向不會「模擬STDIN」。當您重定向時,文件是該進程的標準輸入。特別是,如果輸入是常規文件,比許多程序是管道或tty,許多程序具有不同的行爲,因此您可能會得到不同的行爲。例如:
$ < file perl -E 'say "is a regular file" if -f STDIN' is a regular file $ cat file | perl -E 'say "is a regular file" if -f STDIN'
對不起,我是新手,是否可以解釋一下您的示例程序,謝謝。 – user685275 2011-04-27 15:47:11
@ user685275該程序只檢查其輸入流(stdin)是否爲常規文件。如果是,則打印「是常規文件」。如果沒有,它什麼都不做。從文件重定向時,該文件是該程序的輸入流。當從另一個進程管道傳輸時,管道的讀取端是輸入流。當你沒有管道或從tty重定向運行時,tty是輸入流。 – 2011-04-27 17:10:43
感謝您的回答,非常感謝。 – user685275 2011-04-28 11:08:14
首先,兩個結果是相同的。沒什麼可說的。
對於cat a.txt | cat
的工作原理,第一隻貓參數a.txt
,然後打印其內容。你管第一個的stdout
到第二個的stdin
。第二個cat
找不到任何參數,因此它從stdin
中讀取內容,並將其打印出來。
因爲你在第二個命令使用<
,系統取代的cat
stdin
與a.txt
文件流。其他情況與第一種情況下的第二隻貓相同。
投票轉移到超級用戶,這不是一個編程問題。 – unwind 2011-04-27 10:54:23
@unwind呃..是的。 Bash是一種編程語言。這是編程 - 高水平。 – 2011-06-17 20:18:10
這裏存在的問題(它更適合):http://askubuntu.com/questions/172982/what-is-the-difference-between-redirection-and-pipe – 2014-05-16 04:37:30