~/.bashrc及bash脚本中句号(.)的作用是什么?
嘿,这个问题问得特别好!刚接触bash脚本的时候,确实很容易把这个单独的.和表示当前目录的./搞混,我来给你详细拆解一下:
一、脚本里的
.到底是啥? 在bash里,单独的.是**source命令的别名**,它的核心作用是:在当前shell进程中执行指定脚本里的命令,而不是启动一个新的子shell来执行。
为啥要这么做?举个例子:如果脚本里定义了环境变量、别名或者自定义函数,要是用普通的sh script.sh或者./script.sh执行,这些变量/函数只会存在于临时启动的子shell里,脚本执行完子shell就消失了,当前shell根本拿不到这些修改。但用.或者source执行的话,所有操作都会直接作用在当前shell环境里,修改会立刻生效并保留。
回到你给的代码片段:
if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi . /etc/bash_completion
这段代码的核心就是用.加载bash补全脚本——不管是/usr/share下的还是/etc下的,加载之后,当前shell就能立刻用上bash的命令补全功能(比如按Tab键补全命令、参数),不用重启shell就能生效。
二、~/.bashrc里的
.有啥用? ~/.bashrc是bash启动时会自动加载的用户配置文件,里面的.同样是source的别名,主要用在这几个场景:
- 加载其他配置文件:比如有些系统会把用户的环境变量、单独的别名集合放在
~/.bash_profile或者~/.bash_aliases里,你会在.bashrc里看到类似. ~/.bash_profile的写法,这样就能把其他文件里的配置统一导入到当前shell环境,不用重复编写相同配置。 - 加载自定义脚本/函数:如果你自己写了个存放专属别名、工具函数的脚本(比如
~/.my_bash_tools),用.把它加载到.bashrc里,每次打开终端,这些自定义内容都会自动生效。 - 复用配置逻辑:把一些通用的配置抽成单独的文件,用
.导入,能让.bashrc的结构更简洁,后续维护也更方便。
最后再划个重点:别把单独的.和./搞混!./script.sh里的./才是表示当前目录,用来执行当前目录下的脚本;而单独的.是一个shell命令,和source完全等价。
内容的提问来源于stack exchange,提问作者Ajil Raju
相关产品推荐
相关产品推荐

