exec在shell中使用時執行不會傳回目前的shell, 而是和之前的shell獨立,就像是兩個程式,但是不會産生新的pid。
exec指令如下:
exec ls
在shell中執行ls,ls結束後不傳回原來的shell中了
exec <file
将file中的内容作為exec的标準輸入
exec >file
将file中的内容作為标準寫出
exec 3<file
将file讀入到fd3中
exec 4>file
将寫入fd4中的内容寫入file中
ls >&4
Ls将不會有顯示,直接寫入fd4中了,即上面的file中
exec 5<&4
建立fd4的拷貝fd5
exec 3<&-
關閉fd3
示例1如下:
[[email protected] jexusbak]#
[[email protected] jexusbak]# pwd
/root/jexusbak
[[email protected] jexusbak]# ls
default fanti qqxdlq2 souhu xdlq2 xdlq2ceshi xunlei
[[email protected] jexusbak]# bash
[[email protected] jexusbak]# exec > test
[[email protected] jexusbak]# ls
[[email protected] jexusbak]# pwd
[[email protected] jexusbak]# exit
exit
[[email protected] jexusbak]# cat test
default
fanti
qqxdlq2
souhu
test
xdlq2
xdlq2ceshi
xunlei
/root/jexusbak
[[email protected] jexusbak]#
如上:在執行exec >ls後,再輸入指令ls,pwd不會輸出到目前 shell中,而是重定向到test這個檔案中,這些都是在一個shell中實作的,并不會産生新pid;關閉的exec請使用
exec <&-
示例2如下:
[[email protected] jexusbak]# cat test
ls
pwd
[[email protected] jexusbak]# bash
[[email protected] jexusbak]# exec < test
[[email protected] jexusbak]# ls
default fanti qqxdlq2 souhu test xdlq2 xdlq2ceshi xunlei
[[email protected] jexusbak]# pwd
/root/jexusbak
[[email protected] jexusbak]# exit
[[email protected] jexusbak]#
如上:我們test中原來有ls,pwd兩行指令,我們将test中的内容作為exec的标準輸入,則會在螢幕上依次執行這兩個指令。
綜上所述,我們可以使用此種方法列印日志,而不必逐行指令加重定向生成。
如:exec 100>/tmp/test
exec 1>&100
exec 2>&1
exec 100<&-最後關閉fd,我們要有關閉檔案描述符的習慣。