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

Fish Shell扩展内置cd后无法使用`cd -`切换至原目录

解决Fish Shell自定义cd函数后cd -失效的问题

你的问题出在参数传递错误、conda激活/停用逻辑写反,另外Fish的上一次目录确实不是用环境变量维护的,而是内置的shell变量$OLDPWD,不需要手动设置。

问题分析

  1. 参数传递错误:你写的builtin cd $param $argv是多余的,$param在Fish里完全没必要,直接传递$argv就能把所有参数(包括-)正确交给内置cd命令,错误的参数格式导致cd -无法被正确解析。
  2. 逻辑判断反了:第二个分支里,你判断“当前目录包含$CONDACONFIGDIR”时就停用conda,这完全搞反了——应该是当前目录不在$CONDACONFIGDIR及其子目录下时才执行停用。
  3. OLDPWD的误解:Fish的$OLDPWD是shell本地变量,不是环境变量(所以env命令看不到),内置cd会自动维护它,不需要手动用set -gx设置。

修正后的代码

function cd -d "cd with auto conda activation"
    # 正确调用内置cd,传递所有参数
    builtin cd $argv

    # 检查当前目录是否存在.condaconfig文件
    if test -f ./.condaconfig
        set -gx CONDACONFIGDIR (pwd)
        conda activate (cat ./.condaconfig)
    else if [ -n "$CONDACONFIGDIR" ]
        # 只有当当前目录不在CONDACONFIGDIR路径下时,才停用conda
        if not string match -q -- "$CONDACONFIGDIR*" (pwd)
            set -gx CONDACONFIGDIR ""
            conda deactivate
        end
    end
end

修正说明

  • 去掉了多余的$param,确保cd -这类参数能被内置cd正确处理,恢复切换到上一目录的功能。
  • 修正了conda停用的判断逻辑,现在只有离开$CONDACONFIGDIR及其子目录时才会停用环境,避免在子目录里误触发。
  • 移除了无效的OLDPWD手动设置,依赖Fish内置的变量维护机制即可。

内容的提问来源于stack exchange,提问作者glass-ships

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:34:57