shell——eval exec

eval

# cat test.sh
echo \$$#
eval "echo \$$#"

# sh test.sh a b c
$3
c

 

shell的内建命令exec将并不启动新的shell,常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。

#cat test1.sh
#!/bin/bash
a=1
exec sh test2.sh
echo $a    #执行exec后不会执行这一句。

#cat test2.sh
#!/bin/bash
a=2
echo $a

 

不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。

exec 3<&0    #将操作符3也指向标准输入

exec 6<>/tmp/fd6
echo aaa >&6
echo bbb >&6
cat /tmp/fd6  

exec 6>&-    #关闭fd6

 

posted @ 2017-02-18 23:10  沄持的学习记录  阅读(1335)  评论(0编辑  收藏  举报