使用问答

linux和shell

当前位置: 首页 -> 使用问答 -> linux和shell -> 正文

shell 下 exec,source,.,bash和sh以及export得区别

信息来源: 发布日期:2023-08-20

  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的命令。