Bash內置命令exec可以替換當前程序而不需要啟動一個新的進程,可以改變標准輸入和輸出而不需要啟動一個新的子進程。
如果文件用exec打開,read命令就會把文件指針每次指向下一行直到文件的末尾,如果要重新從文件開始讀取,則必須把文件關閉再重新打開。
1、替換當前shell,執行某個命令,命令終止,shell也就終止了
$exec ls
2、打開文件作為當前shell的標准輸入
$exec <file_name
3、打開文件作為當前shell的標准輸出
$exec >file_name
4、打開文件作為輸入,並分配文件描述符
$exec 3<datafile
5、打開文件作為輸出,並分配文件描述符
$exec 4>datafile
6、創建文件描述符fd4的拷貝fd5
$exec 5<&4
7、關閉文件描述符
$exec 3<&- //關閉輸入文件描述符
$exec 4>&- //關閉輸出文件描述符
注意: <&和重定向操作符>&、&>的區別
例子:
$exec 3>filex //打開文件filex並分配文件描述符3,作為輸出
$who >& 3 //who命令的輸出輸出到filex
$date >& 3 //date命令的輸出輸出到filex
$exec 3>&- //關閉filex
$exec 3<filex //重新打開文件filex並分配文件描述符3,作為輸入
$cat <& 3 //重定向cat命令的輸入到文件描述符3,即文件filex
$exec 3<&- //關閉filex