shell - 将多个项目附加到 fish shell 中的路径(相当于 : +=)

标签 shell fish

例如chruby让用户通过定义额外的 ruby 路径。以下内容:

ruby +=( /opt/jruby-1.7.0 “$HOME/src/rubinius” )

有没有一种很好的方法可以在 fish 身上实现这一点?

最佳答案

所有的 fish 变量都是数组。所以理论上这会很简单

set -x RUBIES $RUBIES /opt/jruby-1.7.0 "$HOME/src/rubinius"

不幸的是,fish 在导出 var 时不会自动将该数组转换为冒号分隔值的字符串。目前,fish 仅对 PATH 和 MANPATH 执行此操作。

你可以这样做:

set -x RUBIES "$RUBIES:/opt/jruby-1.7.0:$HOME/src/rubinius"

但这假设 RUBIES 已经设置;否则你会得到一个带有前导冒号的字符串,它可能对任何使用 var 的软件有特殊意义,也可能没有特殊意义。处理这个很简单:

if set -q RUBIES[1]
    set -x RUBIES "$RUBIES:/opt/jruby-1.7.0:$HOME/src/rubinius"
else
    set -x RUBIES "/opt/jruby-1.7.0:$HOME/src/rubinius"
end

同样,如果您使用的是 fish 2.3(即将发布)或从 git head 构建的 fish,您可以使用新的内置“string”来拆分和连接冒号上的字符串:

set rubies (string split ':' $RUBIES)
set rubies $rubies /opt/jruby-1.7.0 "$HOME/src/rubinius"
set -x RUBIES (string join ':' $rubies)

关于shell - 将多个项目附加到 fish shell 中的路径(相当于 : +=),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269310/

相关文章:

linux - 前台进程组和标准输入

python - 如何在 Python 中设置父 shell 的环境变量?

fish - 如何在 fish shell 历史中添加条目?

windows - 在 Windows 上使用 Bash 时如何在 Fish 中显示完整目录?

shell - 如何在fish shell中导出函数

linux - 需要通过 SFTP 将文件从一台 Linux 机器传输到另一台 Linux 机器

php - 如何将 shebang 放入 PHP 5.4 CLI 中而不触发 Deprecated?

git - 如何在同一个 CLI 终端的屏幕上显示 `git branch` 的输出?

git - Fish 函数创建随机文件

python - 将*多个*路径附加到fish中的PYTHONPATH