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

  • 本文关键字:路径 相当于 项目 shell fish
  • 更新时间 :
  • 英文 :


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

红宝石+=(/opt/jruby-1.7.0"$HOME/src/rubinius")

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

所有fish变量都是数组。所以从理论上讲,这就像一样简单

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

不幸的是,fish在导出变量时不会自动将该数组转换为一系列冒号分隔的值。目前,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)

最新更新