1. 程式人生 > >Shell中的檔案重定向

Shell中的檔案重定向

重定向指的是改變程式執行的輸入來源和輸出地點。
這裡寫圖片描述

重定向標準輸出

cat file | sort 1 > sort.out 
cat file | sort >sort.out  #這兩個命令等同
pwd >> path.out #追加
nullfile.txt    #如果想建立一個長度為0的空檔案,可以用' > f i l e n a m e ':

重定向標準輸入

  • eg1: sort < file將file的內容輸入到sort進行排序,排序後的結果sort命令輸出
    sort < name.txt > name.out
  • eg2:分隔符用法 —表示結合cat命令從標準輸入輸入內容到指定檔案,遇到指定內容結束輸入操作
    這裡寫圖片描述

重定向標準錯誤

eg:$ grep "trident" missiles 2>/dev/null
在這個例子中,grep命令在檔案missiles 中搜索trident字串,如果出錯,錯誤資訊會重定向到/dev/null。

結合使用標準輸出和標準錯誤

eg:$ cat account_qtr.doc account_end.doc 1>accounts.out 2>accounts.err
指令碼/命令的正常輸出和錯誤資訊重定向到不同的檔案中。

eg: grep “standard” standard.txt >grep.out 2>&1
指令碼/命令的正常輸出和錯誤資訊都重定向到同一個檔案中。

注意:shell是從左至右分析相應的命令

exec和檔案描述符在一起

  exec命令可以用來代替當前shell;換句話說,並沒有啟動子shell,使用這一命令時,任何現有環境都將被清除,並重新啟動一個shell。
  exec commandcommand通常是一個shell指令碼。測試執行完該命令後,需要重新登入shell,然後export宣告的變數都失效了。
  exec命令對檔案描述符進行操作時,它不會覆蓋你的當前的shell。

#!/bin/bash
exec 3<&0 0<name.txt 
read line1
read line2
exec 0<&3

echo $line1
echo $line2

實現檔案描述符3快取標準輸入(檔案描述符為0),然後將指定檔案重定向到標準輸入,在操作完指定檔案以後,再從快取檔案(3)恢復標準輸入。