当我在文件中输入一个新别名时,.bashrc
我无法立即在终端窗口中使用它,直到最近我才想到必须重新启动终端才能重新加载文件.bashrc
。然后我在某处发现,如果我写
. .bashrc
这将.bashrc
在当前窗口中重新加载文件,我无需重新启动。这确实有效,但实际上发生了什么?为什么这会重新加载文件.bashrc
?
答案1
因为.
是一个命令。
它是一个 shell 内置命令,它读取命名的文件并在当前 shell 进程中执行其中的命令。
Bourne Again shell 也有source
此命令的同义词。但这是 Bashism(Bourne Again shell 从 C Shell 中获取的)。尽管 Bourne Again shell 与 TENEX C Shell、Z Shell 和其他 Shell(但不是 Korn shell,请注意)共享 Bashism。单一 UNIX 规范仅标准化.
。
.
还要注意, /的行为source
会根据 Bourne Again shell 是否以 POSIX 兼容模式运行而发生微妙变化。(这与其他 shell 类似,尽管它们的非标准行为彼此并不相同。例如,对于 Z Shell,有一个预编译的 shell 脚本机制,并且在其搜索路径处理方面source
略有不同.
。另一个例子是 Korn shell.
将运行 shell 函数。)
~/.bashrc
只是几个文件中的一个,其内容(取决于 shell 进程的调用方式)自动来源在 shell 启动时。没有什么可以阻止它手动来源。尽管如果它的操作不是幂等的,你之后可能需要做一些修复工作。
进一步阅读
- “特殊内置实用程序:点”。 Shell 命令语言. 单一 UNIX 规范。第 6 期。IEEE 1003.1。2013 年。开放群组。
- 巴什主义. Greg 的维基。
- “Bourne shell 内置命令”。 Bash 参考手册. 自由软件基金会。
- “Bash 内置命令”。 Bash 参考手册. 自由软件基金会。
- “Bash 启动文件”。 Bash 参考手册. 自由软件基金会。
- 执行 Bash 脚本与获取该脚本有什么区别?
答案2
help .
会告诉你:
.: . filename [arguments]
Execute commands from a file in the current shell. Read and execute commands from FILENAME in the current shell. The entries in $PATH are used to find the directory containing FILENAME. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed. Exit Status: Returns the status of the last command executed in FILENAME; fails if FILENAME cannot be read.
说. .bashrc
执行(源)文件.bashrc
,使得对文件所做的更改在当前会话中可用。
默认情况下,~/.bashrc
将在登录时读取。
.
是 的同义词source
。
答案3
该命令与执行文件的命令.
相同。这会将您定义的所有别名以及任何其他 shell 设置/变量添加到当前环境中。来自的帮助页面:source
.bashrc
source
source: source filename [arguments]
Execute commands from a file in the current shell.