Iva*_*var 19 shell environment-variables bashrc
可能的重复:
使用“. ”和“来源”
我已经使用了点命令 '.' 和 'source' 重新加载给定的 rc 文件(通常用于更新我的环境变量),但我不确定它们是否不同以及是否首选。两者有什么区别 ?
Sté*_*las 32
.是 Bourne 和 POSIX shell 命令,而source是 C-Shell 命令。
一些 Bourne-shell 派生类bash,如zsh和 的大多数实现ksh也有一个source命令,它通常是 for 的别名.- 但是,它的行为可能略有不同(例如在 zsh 和 ksh 中)。
对于bash,.和source相同的行为,但他们的行为是由他们是否在POSIX模式下运行或not¹影响。
POSIX 要求.命令在无法打开文件进行读取时退出 shell 进程²,$PATH如果提供的路径不包含/.
csh'ssource将参数解释为路径,并且永远不会在$PATH.
庆典.并source表现为POSIX要求在POSIX模式下,并作为pdksh程序的source时候没有,那就是如果他们不能打开文件进行读取(相同的,因为他们不退出脚本command .)和查找的文件$PATH 和当前目录,如果提供的路径不包含/.
zsh的.是POSIX要求,同时的行为source看起来在当前目录第一,然后$PATH(甚至在csh仿真)当参数不包含/。(请参阅info zsh .和info zsh source了解详情)。如果.或source无法找到/打开文件,则只会在 POSIX 模式(sh仿真)下中止 shell 。
AT&T kshsource也不会退出 shell,但不会在当前目录中查找文件。
总而言之,在类似 Bourne 的 shell(虽然不是没有command内置的 Bourne shell )中,如果你想要一致的行为,你可以这样做
command . /path/to/the-file-to-source || handle-error
Run Code Online (Sandbox Code Playgroud)
如果the-file-to-source是在当前目录中,一定要写:
command . ./the-file-to-source || handle-error
Run Code Online (Sandbox Code Playgroud)
在sh脚本(哪里sh是 POSIX sh)中,您应该能够依赖上述 POSIX 行为。
¹zsh并bash在调用时启用 POSIX 模式sh。对于bash,还当它收到POSIXLY_CORRECT在其环境中(即使是所谓的bash即使没有所谓的POSIX命令bash),或者当它接收SHELLOPTS=posix,或者调用时使用bash --posix或bash -o posix或之后set -o posix。使用 zsh,您emulate sh可以模拟 sh. 仿真改变了一大堆改变 zsh 行为的选项。在这种情况下,选项是POSIX_BUILTINS。
在 bash 中,您可以使用 (non-POSIX),[ -o posix ]命令检查是否处于 POSIX 模式。在 zsh 中,您检查 的输出emulate以查看您是否处于sh仿真状态,或[[ -o posixbuiltins ]]检查是否启用了该特定选项。您还可以临时启用给定的仿真模式emulate -L(仅在当前本地范围内进行仿真)。
² 用于非交互式 shell。对于交互式外壳,行为因外壳而异,有些会忽略失败,有些会像某些语法错误一样返回提示。此外,当在子 shell 中运行时,它只会退出子 shell。
| 归档时间: |
|
| 查看次数: |
12902 次 |
| 最近记录: |