歡迎來到另一個星期五...
現在是時候了解終端的一小部分了。 經過深思熟慮後,我決定創建一個有關 標準流; 儘管這是膚淺的,但我認為這是每個人都應該知道的。
標準流
標準流 它由用戶和終端之間的幾個通信通道組成。 這些輸入/輸出“通道”在執行命令時顯示或捕獲信息。
3個I / O連接為: 標準輸入 標準輸入, 標準輸出 標準輸出, 斯特德 標準錯誤.
標準輸入:標準輸入
標準輸入是我們通過管道,重定向,鍵盤等從命令捕獲信息的方式。 我們用文件描述符0標識它。
一個標準輸入的例子是:
排序<列出
它獲取列表中的所有信息(在本例中為隨機寫入的數字),並且在將文件重定向到ls命令時,將按字母順序對數字列表進行排序。 在此示例中,標誌是隱式的。
標準輸出:標準輸出
顧名思義,標準輸出通過控制台顯示命令的輸出。 如果我們寫ls,它在屏幕上顯示給我們的所有信息就是標準輸出。 它由描述符1表示。
現在,我將嘗試使用bash編寫的腳本實例化stdin和stdout,僅僅是因為我喜歡bash hahaha。 🙂
測試文件
#!/ bin / bash如果[-t 0]; 然後回顯“您正在使用stdout” elif [-t 1]; 然後回顯“您正在使用標準輸入”,否則回顯“殘酷錯誤” fi
現在,截圖展示瞭如何使用腳本。 重定向或在腳本中使用管道時,請使用 測試 知道是否僅執行標準輸出腳本,如果不是,則顯然是標準輸入。
bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
請記住修改命令並進行練習,以便您學習。
stderr:標準錯誤
標準錯誤是程序顯示錯誤或診斷的方式。 它由描述符2表示。
為了理解這個概念,就是這種情況:當我們要保存命令錯誤時,我們考慮的第一件事就是將輸出重定向到純文本。
ls> info.txt
這將起作用,命令信息將存儲在純文本文件中。 但是在保存錯誤時,它不會存儲錯誤,而是將其顯示在屏幕上,並且純文本文件為空。
相反,如果我們使用2>指示將stderr保存在文件中:
ls foo 2> info.txt
現在,它將錯誤信息保存在文本文件中。
最 壳类 允許使用&>將stderr和stdout存儲在單個命令中,其中Foo是不存在的目錄
ls下載Foo&> info.txt
該文件將包含在Foo中執行ls時的錯誤信息,並將在“下載”下列出目錄。
最後,那個著名的是什麼 2>&1?
簡單,將stderr重定向到stdout。 在&和1中間的&表示它將重定向到stdout。 如果不存在,它將類似於...“將錯誤重定向到文件1”。
並可以重定向:
- 標準輸出到文件
- stderr到文件
- 標準輸出到標準錯誤
- stderr到stdout
- stderr和stdout到文件
- 等等
今天的人就是這樣。 我們閱讀並感謝您的光臨。 😀
有趣。 多虧了您的教程,我更喜歡Bash。
親愛的,有趣,但是您在以下行中有錯誤:
“並且在將文件重定向到ls命令時”,應該是“並且在將文件重定向到sort命令時”。
問候。
文本開頭有錯誤,當您指示命令“ ls”時,應為“ sort”:
«它將獲取列表中的所有信息-在這種情況下為隨機寫入的數字-,並將文件重定向到ls命令時(此處為排序)»
問候和感謝您分享您的工作
這對cron非常有用,在cron中您希望刷新輸出(/ dev / null),但將錯誤存儲在文件中。 另外,當我這樣做時,我通常使用date命令來確切指定它們何時失敗。
Bash(sh)具有由Unix哲學開發的這些工具,“做一件事情,做好一件事情”
好吧,我什麼都沒發現
哈哈,很好的解釋了,你不懂什麼?