-- TOC --
source命令,文件包含,又称为点命令,因为一个小点与输入source功能等效,都是引入一个shell脚本,并在当前bash进程中运行。
$ source ~/.bashrc
$ . ~/.bashrc
使用source,不需要让脚本文件具备可执行权限!也不会新建bash进程,脚本文件中的命令,均在当前shell中执行。
bash ~/.bashrc
这种方式,就是新开一个bash进程来执行脚本文件,不过也不需要让脚本文件具备可执行权限。
$ bash <jb.sh> # new process
$ bash <jb.sh> & # new process in background
脚本文件没有可执行权限,就不需要有#!
那一行。有可执行权限的文件,如果没有 #!
行,默认使用系统默认bash来执行。设置可执行权限的方式:
$ chmod +x <filename>
在当前bash进程中运行是什么意思?
其实,bash每次执行某个命令,都是开启一个新进程(ps命令可以看到这个进程),自己则等待此进程执行完毕,再返回命令提示符给用户,或者让命令进程后台执行,自己不去等待命令进程的结束。
在当前bash进程中运行,意味着没有新开bash进程,而是用当前bash进程,去开启命令进程,等待或不等待都可以。
如果是这样bash filename.sh
方式执行脚本,当前bash或新开一个bash进程,然后在新开的bash进程中,去执行脚本中的命令,执行这些命令,又会开启新进程,anyway...
在当前bash进程中运行,就少开了一个bash进程,相对而言少占用一点系统资源,当然也要看具体需求。
**!! sourced script 可以使用return **
对应了bash function都是在当前shell进程中执行这个细节。
多说几句Linux下的进程
在Linux中,进程和线程的概念比较模糊,区分的并不是那么清楚,各自资源隔离的执行序列是进程,process;共享资源的执行序列是线程,thread;但Linux代码中,所有的执行序列,都叫Task!?
本文链接:https://cs.pynote.net/sf/linux/shell/202110307/
-- EOF --
-- MORE --