天天看點

linux exec用法

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,我們要有關閉檔案描述符的習慣。

繼續閱讀