shell——數據流重定向

在shell中,咱們常常要將一些指令執行的結果進行保存,或者想讓一些指令執行的錯誤信息不顯示到屏幕上,那麼咱們就須要用到數據流重定向功能。先介紹一下stdout, stderr, stdinshell

  • stdin:標準輸入文件,文件描述符爲0。指令默認從stdin讀取數據。
  • stdout: 標準輸入文件,文件描述符爲1。通常來講,當一個指令成功執行以後,指令輸出的內容就會輸出到stdout。
  • stderr: 標準錯誤輸出文件,文件描述符爲2。若是一個指令沒有成功執行,那麼指令輸出的錯誤信息就會輸出到stderr。

stdout和stderr的內容默認顯示到屏幕,而stdin的內容默認從鍵盤輸入。bash

  1. 標準輸出重定向使用符號: >(1>) 和 >>(1>>)code

    • 1>:以覆蓋的方式將正確的數據輸出到文件或設備
    • 1>>:以累加的方式將正確的數據輸出到文件或設備
  2. 標準錯誤輸出重定向使用的符號:2> 和 2>>file

    • 2>:以覆蓋的方式將錯誤的數據輸出到文件或設備
    • 2>>:以累加的方式將錯誤的數據輸出到文件或設備
  3. 標準輸入重定向使用符號:< 和 <<數據

    • <: 將本來應該由鍵盤輸入的內容改由文件輸入。
    • <<: 將本來應該由鍵盤輸入的內容改由文件輸入。不過<<後面能夠跟一個結束符(用戶自定義),當讀取文件內容遇到這個結束符時,就會終止讀取。

4. >是1>的簡寫,>>是1>>的簡寫。重定向

具體應用:

1. 輸出重定向

[aliao@localhost ~]$  echo "aliao" > aliao.txt
  > 將是stdout重定向到aliao.txt
[aliao@localhost ~]$  ls -a  >> dir.txt
  > 將是stdout重定向到dir.txt,以累加的方式

2. 輸入重定向

[aliao@localhost ~]$ cat > newfile < oldfile
  > 將stdin重定向到oldfile,將stdout重定向到newfile

3. 標準輸出與錯誤輸出分流

[aliao@localhost ~]$ find /home  > stdout.txt  2> stderr.txt
  > 將stdout重定向到stdout.txt 將stderr重定向到stderr.txt

4. 標準錯誤輸出與標準輸出輸出到同一文件

[aliao@localhost ~]$ find /home .bashrc > stdout.txt 2>&1
  > stdout重定向到stdout.txt,而後再將stderr重定向到stdout.txt
[aliao@localhost ~]$ find /home .bashrc > stderr.txt 1>&2
  > stderr向到stderr.txt, 再將stdout向到stderr.txt

5. <<的用法:

cat > aliao.txt << EOF
    鍵盤輸入的內容
    ...
    EOF

當從鍵盤輸入內容直到EOF時,cat就中止讀入數據了。EOF使用戶自定義的一個終止符號(此處我是用的是EOF),兩個EOF之間的內容會被讀取。di

補充內容:關於/dev/null
/dev/null是一個黑洞設備,能夠吃掉任何導入該設備的信息。若是用戶想要將一些輸出信息或者錯誤信息丟棄而不顯示到屏幕或者導入到文件的話,那麼能夠直接導入到/dev/null將其丟棄。文件

[aliao@localhost ~]$ find /home .bashrc > userBash.txt 2> /dev/null 
> 將正確的結果保存到文件userBash.txt,將錯誤信息丟棄。
相關文章
相關標籤/搜索