让 Fish 在 HOME 以外的目录中启动我

Make Fish start me in a directory other than HOME

我是 运行 Vagrant 控制的虚拟机上的鱼。我想使用 ~vagrant 作为转储 VM 特定配置的地方,所以这是我的 $HOME。我有 /vagrant 作为与主机共享的目录,这就是我一直想去的地方。

当我登录到 VM 时,我希望 Fish 将我转储到 /vagrant/

在 Bash 中,我会将 cd /vagrant/ 放入 ~/.bashrc 中。但是,我看到有 another question about changing directories in Fish 并且评论表明将 cd /vagrant/ 放入 ~/.config/fish/config.fish 将是一个错误,因为 Fish 会在每个命令中隐式评估它。 (我没有添加到那个问题,因为它似乎是关于修复有问题的用户环境以在标准目录中启动,当我想要相反的方式时。)

有人可以阐明使 Fish 在非 HOME 目录中启动用户的最佳方法吗?

我假设你在你喜欢的问题中指的是这条评论:

No, don't do it! If you add a cd to your config.fish, it will work for everyday use, but fish will also run the cd before you run any Fish shell script.

就目前而言,这是真的。 config.fish 脚本会被每个 fish 进程读取,无论它是否是交互式的。处理该问题的方法是仅在 shell 是交互式的情况下执行 cd:

if status is-interactive
    cd /vagrant
end

请注意,如果您 运行 是旧版本,则可能需要使用 status -i

此外,如果不是很明显,这实际上并没有改变 $HOME,因此不会改变 fish 查找您的个人自动加载函数的位置或存储其命令历史记录的位置。所以如果你想 "use ~vagrant as the place where VM-specific configuration gets dumped" 你需要实际改变你的主目录。或者,除了执行 cd 命令外,还设置 HOME.