在nvm README.markdown中说
请注意
which nvm
无效,因为nvm
是来源的shell 函数,不是可执行的二进制文件。
我发现nvm安装过程会使用
更新.bashrc
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
不知何故,这使得nvm
命令可用于shell。我的问题是什么是"来源的shell函数"命令nvm执行的确切内容是什么?
答案 0 :(得分:6)
这个措辞很草率。 nvm
只是一个shell函数,它通过获取定义该函数的文件来定义。这并没有以任何定性的方式改变功能:如果你手动输入它,它将是相同的功能,具有所有相同的行为,因此应用“sourced”作为修饰符有点误导;更准确地说nvm.sh
是一个源脚本,它定义了一个名为nvm
的shell函数。
至于具体语法:
. somefile
是更便携的写作方式
source somefile
...执行当前shell 中somefile
中的操作,而不是作为子进程运行的单独shell。
因此,获取脚本可以修改当前的解释器 - 设置变量,更改其工作目录,以及是,定义别名和函数 - 以执行外部程序的方式不能。
说明一下:如果您运行bash somefile
,那么somefile
定义的任何函数仅在bash
的特定副本的持续时间内存在 - 当它退出并返回给您时提示,somefile
中定义的函数将不再可用。相反,当您source somefile
时,因为somefile
的内容在您当前的shell实例中执行,所以这些内容能够持久存在。