You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Bash脚本转换为Fish脚本以检测.nvmrc文件并修复异常

修复并转换Bash的.nvmrc自动加载脚本到Fish

先说说原Bash脚本的作用:它会在你每次切换目录时,自动检查当前目录下有没有.nvmrc文件,如果有的话就执行nvm use,帮你切换到对应版本的Node.js。核心是通过Bash的PROMPT_COMMAND钩子,每次显示命令提示符前都跑一遍检查逻辑。

再看你现在的Fish脚本,几个地方出了问题导致它没法正常工作:

  • Fish里给变量赋值必须用set命令,你写的OLD_PWD="$PWD"不符合Fish语法
  • 你只定义了函数,但没把它绑定到Fish的提示符事件上,所以函数根本不会自动执行
  • 使用bass调用Bash命令的写法不对,需要把整个Bash命令用单引号包起来,才能正确解析
  • 条件判断的写法虽然能用,但换成Fish更常用的test语法会更稳妥

下面是修复好的Fish脚本,每一步都加了注释说明:

# 初始化变量,用来记录上一次的工作目录
set OLD_PWD ""

# 定义自动加载nvm的核心函数
function nvm_auto_load
    # 检查当前目录是否和上次的目录不一样
    if test "$OLD_PWD" != "$PWD"
        # 更新变量为当前目录
        set OLD_PWD "$PWD"
        # 检查当前目录下是否存在.nvmrc文件
        if test -e .nvmrc
            # 用bass在Bash环境中加载nvm脚本,然后执行nvm use
            # --no-use参数是避免nvm默认加载默认版本,只加载环境变量
            bass 'source ~/.nvm/nvm.sh --no-use && nvm use'
        end
    end
end

# 先执行一次函数,确保当前目录如果有.nvmrc能立刻加载
nvm_auto_load &
# 将函数绑定到fish_prompt事件,每次显示命令提示符前自动执行
add fish_prompt nvm_auto_load

把这段脚本放到你的Fish配置文件里(比如~/.config/fish/config.fish),重启Fish或者执行source ~/.config/fish/config.fish就能生效了。以后只要切换到有.nvmrc的目录,就会自动帮你切换Node.js版本啦!

内容的提问来源于stack exchange,提问作者s-leg3ndz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:41