Explain this command: . ~/nvm/nvm.sh

7
我并不是Linux的新手,但我不理解为什么在这个命令前要加上“.” 。
. ~/nvm/nvm.sh

对于了解情况的人,这是如何激活nvm bash脚本的方法(它允许在NodeJS宇宙中创建虚拟环境)。但是如果在命令前面没有加那个句点,事情就会出问题。据我所知,句点表示当前目录。然而,如果我执行以下操作:

cd ~/nvm
nvm.sh

或者这个

~/nvm/nvm.sh

这将不起作用。为什么?为什么在运行此命令之前必须输入“。”和一个空格。
2个回答

15
. ~/nvm/nvm.sh
它要求解释器在当前进程中解释脚本。在bash中,它的等价物是:
source ~/nvm/nvm.sh

如果你想要脚本改变环境(变量等),则需要在当前进程中执行脚本。你可以使用help .查看更多详细信息。

~/nvm/nvm.sh

这个命令会在 新的bash进程中运行脚本。它不能更改父进程的环境变量,比如无法将变量导出到父进程。


1
澄清一下,在Bash中,source的别名。source - Orbling
太好了!!!哇,这让一切都清晰明了。非常感谢,我不知道我怎么会不知道这个。 - Barry Steyn
一个澄清 - 最后一个例子(没有 .source)确实在新的 bash(或其他)进程中运行脚本。但是它可以并且确实更改环境,只是在一个子进程中,然后立即退出,所以更改会丢失。它不能在父进程中更改环境。 - twalberg
@Orbling; 严格来说(我有点挑剔),.不是一个别名。.是一个内置命令,就像source一样,它恰好执行与source完全相同的代码。用户无法更改它,这将是别名的情况。请参阅Bash源代码中的builtins/source.def - cdarke
@cdarke:非常正确,它只是以别名的方式运行,作为一种快捷助记符。 - Orbling
显示剩余3条评论

2
. 表示在当前 shell 中运行,因此您设置的环境变量或在脚本中设置的环境变量是共享的。我敢打赌,为脚本启动一个新 shell 将其放在无法运行的环境中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接