holdtom
2019-08-27 16:57:07
管道如何在Bash中工作的簡單解釋是什么?我經常在Bash中使用管道,例如:dmesg | less雖然我知道這是什么輸出,它需要dmesg并讓我滾動它less,我不明白|它在做什么。它恰恰相反>嗎?對于什么有簡單或隱喻的解釋|?在一條線路中使用多個管道時會發(fā)生什么?管道的行為在Bash腳本中出現(xiàn)的位置是否一致?
3 回答

收到一只叮咚
TA貢獻1821條經驗 獲得超5個贊
Unix中的每個標準進程至少有三個文件描述符,它們有點像接口:
標準輸出,即進程打印其數(shù)據(jù)的位置(大多數(shù)情況下是控制臺,即屏幕或終端)。
標準輸入,它是從中獲取數(shù)據(jù)的地方(大多數(shù)情況下它可能類似于鍵盤)。
標準錯誤,這是錯誤和有時其他帶外數(shù)據(jù)發(fā)生的地方。它現(xiàn)在沒有意思,因為管道通常不處理它。
管道將過程的標準輸出連接到左側的過程的標準輸入。您可以將其視為一個專用程序,負責復制一個程序打印的所有內容,并將其提供給下一個程序(管道符號后面的程序)。這不是那個,但它足夠類比。
每個管道只運行兩件事:標準輸出來自其左側,輸入流預期位于其右側。其中每個都可以附加到單個進程或管道的另一個位,這是多管道命令行中的情況。但這與管道的實際操作無關; 每個管道都有自己的。
重定向operator(>
)執(zhí)行相關操作,但更簡單:默認情況下,它將進程的標準輸出直接發(fā)送到文件。正如你所看到的那樣,它不是管道的反面,而是實際上是互補的。>
不足為奇的是<
,它獲取文件的內容并將其發(fā)送到進程的標準輸入(將其視為一個逐字節(jié)讀取文件并在進程中為您鍵入文件的程序)。
添加回答
舉報
0/150
提交
取消