在 .bashrc 中找不到命令“nvm”

问题描述 投票:0回答:1

我试图在 .bashrc 文件中创建一个函数,以便每次使用“nvm use”时更改符号链接。

change_sl() {
   local version="$1"
   ln -sf "$NVM_DIR/versions/node/$version/bin/node" /usr/bin/node
}
nvm() {
   if ["$1" = "use" ]; then
     local version="$2"
     command nvm "$1" "$version"
     change_sl "$(node -v)"
else
     command nvm "$@"
   fi
}

但我有这个错误:未找到命令“nvm”,但有 13 个类似的。

我对 bash 还很陌生,所以如果有人能帮助我,那就太好了。

bash nvm
1个回答
0
投票

NVM 本身是一个 shell 函数而不是外部可执行文件。因此,您无法使用

nvm
调用
command
。引用
command
内置文档:

运行

command
,并使用
args
抑制正常的 shell 函数查找。仅执行内置命令或在
PATH
中找到的命令。

由于 Bash 也不支持继承或超级调用,因此您首先必须使用不同的名称创建原始

nvm
函数的副本,以便可以直接调用它,例如

eval "$(echo "nvm_orig()"; declare -f nvm | tail -n +2)"

function nvm() {
  nvm_orig "$@"
  if [ "$1" = "use" ]; then
    change_sl "$(node -v)"
  fi
}

Evan Broder展示了以不同名称创建函数副本的技术。

© www.soinside.com 2019 - 2024. All rights reserved.