文件描述符我們常見的就是系統預留的0,1和2這三個,他們的意義分別有如下對應關係: 0 —— stdin(標準輸入) 1 —— stdout (標準輸出) 2 —— stderr (標準錯誤) 其中,shell編程里經常用到的就是描述符1,和描述符2。 如:ls命令執行的時候,在標準輸出 輸出了結果 ...
文件描述符我們常見的就是系統預留的0,1和2這三個,他們的意義分別有如下對應關係:
- 0 —— stdin(標準輸入)
- 1 —— stdout (標準輸出)
- 2 —— stderr (標準錯誤)
其中,shell編程里經常用到的就是描述符1,和描述符2。
如:ls命令執行的時候,在標準輸出 輸出了結果,我們可以通過重定向符號,把標準輸出的結果重定向到文件。
ghostwu@dev:~/linux/std_err_out$ ls ghostwu@dev:~/linux/std_err_out$ touch ghostwu.txt ghostwu@dev:~/linux/std_err_out$ ls ghostwu.txt
ghostwu@dev:~/linux/std_err_out$ ls ghostwu.txt ghostwu@dev:~/linux/std_err_out$ ls > std_out.txt ghostwu@dev:~/linux/std_err_out$ cat std_out.txt ghostwu.txt std_out.txt ghostwu@dev:~/linux/std_err_out$ ls 1> std_out1.txt ghostwu@dev:~/linux/std_err_out$ cat std_out1.txt ghostwu.txt std_out1.txt std_out.txt
> 和 1>是等價的,都表示標準輸出重定向。
錯誤重定向:
什麼時候會產生錯誤重定向?比如,最簡單,不存在某文件
ghostwu@dev:~/linux/std_err_out$ ls ghostwu.txt std_out1.txt std_out.txt ghostwu@dev:~/linux/std_err_out$ ls std_err.txt ls: cannot access 'std_err.txt': No such file or directory
我們可以把錯誤信息,通過錯誤重定向寫入文件。
ghostwu@dev:~/linux/std_err_out$ ls std_error.txt ls: cannot access 'std_error.txt': No such file or directory ghostwu@dev:~/linux/std_err_out$ ls ghostwu.txt std_out1.txt std_out.txt ghostwu@dev:~/linux/std_err_out$ ls std_error.txt 2> output_error.txt ghostwu@dev:~/linux/std_err_out$ cat output_error.txt ls: cannot access 'std_error.txt': No such file or directory ghostwu@dev:~/linux/std_err_out$
2>&1,
&1
的含義就可以理解為用標準輸出的引用
2>表示錯誤輸出,&等價於標準輸出
ghostwu@dev:~/linux/std_err_out$ ls a.txt 2>&1 ls: cannot access 'a.txt': No such file or directory ghostwu@dev:~/linux/std_err_out$ ls ghostwu.txt output_error.txt std_out1.txt std_out.txt
2>/dev/null意思就是把錯誤輸出到“黑洞”
ghostwu@dev:~/linux/shell/pipe$ ls ghostwu.txt ls: cannot access 'ghostwu.txt': No such file or directory ghostwu@dev:~/linux/shell/pipe$ ls ghostwu.txt 2>/dev/null ghostwu@dev:~/linux/shell/pipe$ ls ghostwu.txt 2>/dev/null ghostwu@dev:~/linux/shell/pipe$
>/dev/null 2>&1預設情況是1,也就是等同於1>/dev/null 2>&1。意思就是把標準輸出重定向到“黑洞”,還把錯誤輸出2重定向到標準輸出1,也就是標準輸出和錯誤輸出都進了“黑洞”
ghostwu@dev:~/linux/shell/pipe$ ls ghostwu.txt ghostwu.txt ghostwu@dev:~/linux/shell/pipe$ ls ghostwu.txt >/dev/null ghostwu@dev:~/linux/shell/pipe$ ls ghostwu2.txt >/dev/null ls: cannot access 'ghostwu2.txt': No such file or directory ghostwu@dev:~/linux/shell/pipe$ ls ghostwu2.txt >/dev/null 2>&1 ghostwu@dev:~/linux/shell/pipe$ ls ghostwu.txt >/dev/null 2>&1 ghostwu@dev:~/linux/shell/pipe$ ls ghostwu2.txt >/dev/null 2>&1
2>&1 >/dev/null意思就是把錯誤輸出2重定向到標準輸出1,也就是屏幕,標準輸出進了“黑洞”,也就是標準輸出進了黑洞,錯誤輸出列印到屏幕
ghostwu@dev:~/linux/shell/pipe$ ls ghostwu.txt 2>&1>/dev/null ghostwu@dev:~/linux/shell/pipe$ ls ghostwu2.txt 2>&1>/dev/null ls: cannot access 'ghostwu2.txt': No such file or directory ghostwu@dev:~/linux/shell/pipe$