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

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

1,sh

sh test.sh

​ sh是经过建立子进程(subshell)去执行脚本,父进程没法使用子进程中的变量,而子进程对环境变量的修改也不会影响到父进程。父进程中的局部变量子进程也没法使用,子进程会继承父进程的环境变量;html

脚本不须要执行权限shell

2,exec

exec + command
./test.sh exec

​ 使用exec执行脚本,被执行的脚本会继承当前shell的环境变量,exec至关于建立了新进程,它会将主进程的进程资源占用,使用主进程的pid,而exec语句执行完以后,后续的语句再也不执行;
脚本须要执行权限bash

3,source

source test.sh

​ 使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,并且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,相似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。app

脚本不须要执行权限.net

4,fork

./test fork

​ 使用fork执行脚本的时候会建立一个子进程去执行该脚本,子进程会继承父进程的环境变量和声明变量。当子进程执行完毕后会返回父进程,可是父进程的环境变量不会因子进程的改变而改变。code

脚本须要执行权限htm

5,./

./test.sh

​ 建立一个子进程去执行脚本blog

脚本须要执行权限继承

参考连接:进程

https://blog.csdn.net/w616589292/article/details/50854273

http://www.cnblogs.com/pcat/p/5467188.html

https://blog.csdn.net/bigdatahappy/article/details/40114787

相关文章
相关标签/搜索