source(.)命令

-- 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

source_bash

脚本文件没有可执行权限,就不需要有#!那一行。有可执行权限的文件,如果没有 #! 行,默认使用系统默认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 --