連接 STDOUT 和 STDIN 是什麼意思?
我在看一本書,上面寫著:
每個程序至少有三個可用的通信通道:“標準輸入”(STDIN)、“標準輸出”(STDOUT)和“標準錯誤”(STDERR)。
大多數命令接受來自 STDIN 的輸入並將其輸出寫入 STDOUT。他們將錯誤消息寫入 STDERR。此約定允許您像建構塊一樣將命令串在一起以創建複合管道。
shell 將符號
<
、>
和解釋>>
為將命令的輸入或輸出重新路由到文件或從文件中重新路由的指令。要將一個命令的 STDOUT 連接到另一個命令的 STDIN,請使用
|
通常稱為管道的符號。ps -ef | grep httpd
所以基本上這就是說標準輸入是一個允許使用者寫入文件的命令,而標準輸出是一個讓 bash shell 將輸出寫入 shell 的命令,標準錯誤就像輸出一樣,但它只是當文件系統出錯時呼叫。然後我們到了連接 STDOUT 和 STDIN 的部分,我迷路了。
標準輸入和標準輸出不是命令。
將命令想像成帶有裝配線的工廠中的機器。大多數機器設計為有一條傳送帶輸入數據,一條傳送帶輸出數據;它們分別是標準輸入和標準輸出。標準錯誤是機器側面的開口,它可以彈出拒絕。
+-------+ +------------------+ +------------------+ +------+ | input | | machine A | | machine B | |output| | reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket| | ‑voir | → | stderr | → | stderr | → | | +-------+ +------------------+ +------------------+ +------+ || ||
上圖顯示了一條穿過兩台機器的傳送帶。數據來自左側的輸入儲存庫,被饋送到機器 A,然後輸出被進一步傳送到機器 B(它是它的輸入),機器 B 的輸出存放在右側的輸出桶中。
在 unix 術語中,這稱為管道。比喻是管道的:管道將機器 A 連接到機器 B。上面管道的 shell 語法是
<input-file.txt commandA | commandB >output-file.txt
<
重定向符號告訴 shell在啟動之前將標準commandA
輸入連接到文件。(您可以將重定向放在命令名稱之前或之後。)重定向符號告訴 shell 將的標準輸出連接到. 中間的管道 (" “) 符號告訴 shell在啟動它們之前將’ 的標準輸出連接到’ 的標準輸入。input-file.txt``commandA``>``commandB``output-file.txt``|``commandA``commandB
命令可以有多個輸入和多個輸出,但這是另一天的材料。