文件描述符
當執行shell命令時,會默認打開3個文件,每個文件有對應的文件描述符來方便我們使用:
類型 | 文件描述符 | 默認情況 | 對應文件句柄位置 |
---|---|---|---|
標准輸入(standard input) | 0 | 從鍵盤獲得輸入 | /proc/self/fd/0 |
標准輸出(standard output) | 1 | 輸出到屏幕(即控制台) | /proc/self/fd/1 |
錯誤輸出(error output) | 2 | 輸出到屏幕(即控制台) | /proc/self/fd/2 |
所以我們平時在執行shell命令中,都默認是從鍵盤獲得輸入,並且將結果輸出到控制台上。但是我們可以通過更改文件描述符默認的指向,從而實現輸入輸出的重定向。比如我們將1指向文件,那么標准的輸出就會輸出到文件中。
/dev/null代表linux的空設備文件,所有往這個文件里面寫入的內容都會丟失,俗稱“黑洞”
1、2>/dev/null意思就是把錯誤輸出到“黑洞”
2、>/dev/null 2>&1默認情況是1,也就是等同於1>/dev/null 2>&1。意思就是把標准輸出重定向到“黑洞”,還把錯誤輸出2重定向到標准輸出1,也就是標准輸出和錯誤輸出都進了“黑洞”
3、2>&1 >/dev/null意思就是把錯誤輸出2重定向到標准出書1,也就是屏幕,標准輸出進了“黑洞”,也就是標准輸出進了黑洞,錯誤輸出打印到屏幕
關於這里”&”的作用,我們可以這么理解2>/dev/null重定向到文件,那么2>&1,這里如果去掉了&就是把錯誤輸出給了文件1了,用了&是表明1是標准輸出。
輸出重定向
輸出重定向的使用方式很簡單,基本的一些命令如下:
命令 | 介紹 |
---|---|
command >filename | 把標准輸出重定向到新文件中 |
command 1>filename | 同上 |
command >>filename | 把標准輸出追加到文件中 |
command 1>>filename | 同上 |
command 2>filename | 把標准錯誤重定向到新文件中 |
command 2>>filename | 把標准錯誤追加到新文件中 |
輸入重定向
在理解了輸出重定向之后,理解輸入重定向就會容易得多。對輸入重定向的基本命令如下:
命令 | 介紹 |
---|---|
command <filename | 以filename文件作為標准輸入 |
command 0<filename | 同上 |
command <<delimiter | 從標准輸入中讀入,直到遇到delimiter分隔符 |
我們使用<對輸入做重定向,如果符號左邊沒有寫值,那么默認就是0。
https://blog.csdn.net/mengzuchao/article/details/82378769