重定向,/dev/null, 1>, 2>什么意思?


文件描述符我們常見的就是系統預留的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$

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM