执行shell脚本三种方法的区别:(sh、exec、source)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行shell脚本三种方法的区别:(sh、exec、source)相关的知识,希望对你有一定的参考价值。

参考技术A

使用$ sh script.sh执行脚本时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。
./script.sh与 sh script.sh等效。

使用$ source script.sh方式,在当前上下文中执行脚本,不会生成新的进程。脚本执行完毕,回到当前shell。
source方式也叫点命令。
. script.sh与 source script.sh等效。

使用exec command方式,会用command进程替换当前shell进程,并且保持PID不变。执行完毕,直接退出,不回到之前的shell环境。

二、测试验证
vi loop.sh

显示当前进程

sh的方式:执行loop.sh打印执行进程

source方式:执行loop.sh打印执行进程

exec方式:执行loop.sh打印执行进程

按下ctrl+C

sh方式:父进程是6770,执行loop.sh时的子进程是13736。执行完毕后回到父进程shell。
source方式:父进程和子进程都是6770(执行时没有新的进程),执行完毕会回到父进程shell。
exec方式:进程PID没有改变都是6770,执行完毕(ctrl+C强制关闭)时直接退出了shell。脚本执行时替换了父进程的shell,执行完毕后直接退出,没有回到之前的shell。

以上是关于执行shell脚本三种方法的区别:(sh、exec、source)的主要内容,如果未能解决你的问题,请参考以下文章

shell中sh, exec, source, fork, ./的区别

shell脚本中sourceexecfork区别

exec和source的简单区别

shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别

013-在 Shell 脚本中调用另一个 Shell 脚本的三种方式

在shell下执行命令的方法