Fish Shell频繁出现“Unable to open universal variable file '/': Permission denied”报错的原因及解决方法
嘿,我之前踩过这个坑!这个报错看着让人头大,但其实原因很简单,解决起来也不复杂,咱们一步步来捋清楚:
为什么会出现这个报错?
Fish shell的通用变量(universal variables) 默认存在~/.config/fish/fish_variables文件里,方便在不同会话间共享配置。但如果不小心执行了类似set -U fish_variables /的错误命令,把存储通用变量的路径直接设成了根目录/,就会出问题——普通用户根本没有权限在根目录下创建或修改文件,自然就会弹出「Permission denied」的报错。
简单说就是:通用变量的存储路径被错误指向了无权限访问的根目录。
怎么解决这个问题?
我亲测有效的步骤如下:
启动一个干净的Fish会话
先打开新终端,执行这条命令启动一个不加载通用变量的Fish实例,避免一启动就报错:fish --no-env删除错误的通用变量设置
在这个干净的会话里,执行命令删除那个指向根目录的错误通用变量:set -eU fish_variables这条命令的作用是移除
fish_variables这个通用变量,Fish会自动恢复默认的存储路径~/.config/fish/fish_variables。验证并重启Fish
可以先执行echo $fish_variables确认一下,正常应该输出~/.config/fish/fish_variables(或者展开后的绝对路径)。然后退出当前会话,重新打开正常的Fish终端,你会发现烦人的报错消失啦!
额外注意事项
如果执行完上面的步骤还是报错,那可能是~/.config/fish目录本身的权限有问题,比如被改成了root用户所有。这种情况下可以执行下面的命令修复权限:
sudo chown -R $USER:$USER ~/.config/fish
备注:内容来源于stack exchange,提问作者sjdh

