天天看點

@linux中exec操作檔案描述符及檔案重定向

文章目錄

  • ​​exec操作檔案描述符​​
  • ​​一、exec的基本形式​​
  • ​​二、案例​​
  • ​​1、基礎指令​​
  • ​​2、腳本測試​​
  • ​​三、常見的檔案(重定向)​​

exec操作檔案描述符

exec指令可以用來替代目前shell;

換句話說,并沒有啟動子shell,使用這一指令時任何環境都将被清除,并重新啟動一個shell

linux預設檔案描述符:

每打開一個shell就會打開預設的三個檔案描述符描0,1,2分别代表【标準輸入】和【标準輸出】及【标準錯誤輸出】

一、exec的基本形式

exec command      

二、案例

1、基礎指令

)#  exec 3</tmp/1.txt     //以“隻讀方式”打開/tmp/1.txt,檔案描述符對應為3

   2)#  exec 3>/tmp/1.txt    //以“隻寫方式”打開/tmp/1.txt,檔案描述符對應為3

   3)#  exec 3<>/tmp/1.txt   //以“讀寫方式”打開/tmp/1.txt,檔案描述符對應為3

   4)#  exec 3<&-            //關閉檔案描述符3      

2、腳本測試

#腳本測試
#!/bin/bash
exec 4>&1         #用4記錄标準輸出
exec 1>/tmp/abc   #重定向标準輸出
echo "123"
echo "456"
exec 1>&4         #恢複标準輸出
exec 4>&-         #關閉4
   (運作此腳本,腳本中的echo輸出會輸出到/tmp/abc檔案中,腳本第二行用4>&1 是為了記錄标準輸出的檔案描述符便于執行完畢後恢複标準輸出,恢複标準輸出也可以用exec 1>/dev/tty)


#注:
   echo "hello" >&4 向檔案描述符中輸入内容隻使用 > 不能用 >> ,此時的 > 不會清空檔案,是否清空檔案需要在exec指令關聯檔案描述符到檔案的時候差別使用 > 或 >>
#例如下腳本:
#!/bin/bash
exec 4>/tmp/abc
echo "123" >&4
echo "456" >&4
exec 4>&-

   則每次執行完腳本後/tmp/abc檔案内容都是123\n456,若把第二行換成exec 4>>/tmp/abc則會追加進去(檔案的清空操作是在exec指令的操作時進行的)      

三、常見的檔案(重定向)

(指令)> filename(檔案名稱)  #把标準輸出重定向到一個新檔案中
    command >> filename              #把标準輸出重定向到一個檔案中(追加)
    command 1 > fielname             #把标準輸出重定向到一個檔案中
    command > filename 2>&1          #把标準輸出和标準錯誤一起重定向到一個檔案中
    command 2 > filename             #把标準錯誤重定向到一個檔案中
    command 2 >> filename            #把标準輸出重定向到一個檔案中(追加)
    command >> filename 2>&1         #把标準輸出和标準錯誤一起重定向到一個檔案中(追加)
    command < filename >filename2    #把command指令以filename檔案作為标準輸入,以filename2檔案作為标準輸出
    command < filename               #把command指令以filename檔案作為标準輸入
    command << delimiter             #把從标準輸入中讀入,直至遇到delimiter分界符
    command <&m                      #把檔案描述符m作為标準輸入
    command >&m                      #把标準輸出重定向到檔案描述符m中
    command &m<&-                    #關閉檔案描述符m      

繼續閱讀