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

时间:2016-05-17 07:05:10

标签: shell fish

例如chruby让用户定义其他ruby路径。以下内容:

RUBIES + =(   /opt/jruby-1.7.0   “$ HOME / src目录/ Rubinius的” )

在鱼中有没有很好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:9)

所有鱼类变量都是数组。所以理论上这就像

一样简单
set -x RUBIES $RUBIES /opt/jruby-1.7.0 "$HOME/src/rubinius"

不幸的是,当导出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

如果您正在使用鱼2.3(即将发布)或使用git head制作的鱼,您可以使用新的"字符串"内置以分割并连接冒号上的字符串:

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