概述
一、exec是bash的内置命令
exec执行命令时,不会启用新的shell进程。
source和 .也不会启用新的shell进程,在当前shell中执行,设定的局部变量在执行完命令后仍然有效。
bash或sh执行时,会另起一个子shell进程,其继承父shell进程的环境变量,其子shell进程的变量执行完后不影响父shell进程。
exec是用被执行的命令行替换掉当前的shell进程,且exec命令后的其他命令将不再执行。
例如在当前shell中执行 exec ls 表示执行ls这条命令来替换当前的shell ,即为执行完后会退出当前shell。
为了避免父shell被退出,一般将exec命令放到一个子shell脚本中,在父sehll中调用这个子shell脚本,调用处可以用bash xx.sh(xx.sh为存放exec命令的脚本),这样会为xx.sh建立一个子shell去执行,当执行exec后该子shell进程就被替换成相应的exec的命令。
其中有一个例外:当exec命令对文件描述符操作的时候,就不会替换shell,而是操作完成后还会继续执行后面的命令!
文件描述符
shell中描述符一共有12个
0 代表标准输入
1 代表标准输出
2 错误输出
其他 3-9 都是空白描述符
# exec3>&1 4>&2 1>> bash.log 2>&1
其含义是: 复制标准输出到3 ,错误输出到 4
最后
以上就是忐忑便当为你收集整理的shell 跳过当前错误继续执行_shell脚本中的 exec 命令一、exec是bash的内置命令二、Linux shell 脚本中, $@ 和$# 分别是什么意思?三、怎么理解$0的全部内容,希望文章能够帮你解决shell 跳过当前错误继续执行_shell脚本中的 exec 命令一、exec是bash的内置命令二、Linux shell 脚本中, $@ 和$# 分别是什么意思?三、怎么理解$0所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复