linux中exec操作文件描述符

linux每一個打開文件都會關聯一個文件描述符,需要的時候我們可以使用exec命令指定一個大于3的數字作為文件

linux默認文件描述符

每打開一個shell就會打開默認的三個文件描述符描0,1,2,分別代表標準輸入,標準輸出和標準錯誤輸出。

exec命令關聯文件描述符

exec 5>/tmp/a.txt 讀方式
exec 5/a.txt 寫方式
exec 5/tmp/a.txt 讀寫方式
exec 5&- 關閉文件描述符

應用案例:在shell腳本中重新關聯標準輸出,從而記錄日志到指定文件

#!/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

注意點:

  1. echo “hello” >&4 向文件描述符中輸入內容只使用 > 不能用 >> ,此時的 > 不會清空文件

  2. 是否清空文件需要在exec命令關聯文件描述符到文件的時候區別使用 > 或 >>,
    例有如下腳本:

    #!/bin/bash  exec 4>/tmp/abc  echo "123" >&4  echo "456" >&4  exec 4>&-

    則每次執行完腳本后/tmp/abc文件內容都是123n456
    若把第二行換成exec 4>>/tmp/abc則會追加進去

  • 文件的清空操作是在exec命令的操作時進行的

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享