macos - 在 fish 启动时添加到 $PATH 的相对路径

标签 macos shell environment-variables fish

我想在 fish 启动时将 ./bin 目录(相对于当前 shell 目录)添加到 $PATH 。请注意 fish是一个 shell 。

echo $PATH
set PATH ./bin $PATH
echo $PATH

如果我将这些行放在 ~/.config/fish/config.fish 内shell 将回显相同的路径集合。绝对路径已正确添加。

如果我打开 shell 并输入相同的 set PATH ./bin $PATH在一些包含 bin 的目录中它添加成功。但是当没有 bin 时在当前目录中,它向我显示了一个错误。
set: Could not add component ./bin to PATH.
set: Value too large to be stored in data type

我在 OS X Lion 上运行 fish 1.23.1。

最佳答案

我找到的最好方法 持续添加路径到您的 $PATH

set -U fish_user_paths $fish_user_paths ~/path/name

这前置于 $PATH .并且由于它是持久的,所以路径停留在 $PATH在 shell 重新启动时。

这比在您的 config.fish 中放置命令更有效修改您的 $PATH ,因为与每次 shell 重新启动时运行相比,它只运行一次。

变量 fish_user_paths is intended to be set by the user 1,如 ridiculousfish 所述, fish 的维护者。

为方便起见,考虑创建一个fish函数:2
# ~/.config/fish/functions/add_to_path.fish
function add_to_path --description 'Persistently prepends paths to your PATH'
  set --universal fish_user_paths $fish_user_paths $argv
end

并将其用作:
$ add_to_path foo bar  # Adds foo/ and bar/ to your PATH

笔记
  • 在该页面上,作者给出了示例 set -U fish_user_paths ~/bin .这会覆盖 fish_user_paths单个值为 ~/bin .避免丢失 fish_user_paths 中设置的现有路径,请务必包含 $fish_user_paths除了添加的任何新路径(如我的回答所示)。
  • 我的点文件包含一个稍微高级的版本,它跳过添加重复项 https://github.com/dideler/dotfiles/blob/master/.config/fish/functions/add_to_user_path.fish
  • 关于macos - 在 fish 启动时添加到 $PATH 的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7064053/

    相关文章:

    docker - 将 “aaa.bbb”变量传递给Docker容器进程

    ios - 以协议(protocol)类型为键的 Swift 字典

    shell - 在双跳 SSH session 上重定向使用 Plink 执行的命令的输出

    xcode - 使用 shell 命令重新启动 mac finder 同步扩展

    linux - 使用 tr 命令读取权限

    shell - 对 parent 的 renice 会 renice child 吗?

    docker - 使用env vars和GitlabCI构建一个React Docker镜像

    c - 是否有修改环境变量的可移植方法?

    iPhone OS 当前使用情况统计信息(尤其是 2.x 与 3.x)

    macos - 在 Mac 中安装 Ubuntu 等效库,例如 libssl-dev