加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 什么是源shell函数?

发布时间:2020-12-15 21:49:17 所属栏目:安全 来源:网络整理
导读:在nvm README.markdown中它说 Please note that which nvm will not work,since nvm is a sourced shell function,not an executable binary. 我发现nvm安装过程将更新.bashrc [ -s "$NVM_DIR/nvm.sh" ] . "$NVM_DIR/nvm.sh" # This loads nvm 不知何故,这使
在nvm README.markdown中它说

Please note that which nvm will not work,since nvm is a sourced shell
function,not an executable binary.

我发现nvm安装过程将更新.bashrc

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

不知何故,这使得nvm命令可用于shell.我的问题是什么是“源shell函数”以及命令nvm执行的确切内容是什么?

解决方法

这个措辞很草率. nvm只是一个shell函数,它通过获取定义该函数的文件来定义.这并没有以任何定性方式改变功能:如果你手动输入它,它将是相同的功能,具有所有相同的行为,因此将“sourced”应用为修饰符有点误导;更确切地说,nvm.sh是一个源脚本,它定义了一个名为nvm的shell函数.

至于具体的语法:

. somefile

是一种更便携的写作方式

source somefile

…在当前shell中的somefile中执行操作,而不是在作为子进程运行的单独shell中执行.

因此,获取脚本可以修改当前的解释器 – 设置变量,更改其工作目录,以及是,定义别名和函数 – 以执行外部程序的方式不能.

澄清一下:如果你运行了bash somefile,那么somefile定义的任何函数只存在于bash的特定副本的持续时间 – 当它退出并返回到你的提示时,somefile中定义的函数将不再可用.相比之下,当您获取somefile时,因为somefile的内容在您当前的shell实例中执行,所以这些内容能够持久化.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读