2016-11-12 43 views
1

在Ubuntu 16.10服務器與x64的魚2.3.1創建功能,當通過uru_rt admin install運行我的exe uru_rt上生成標準輸出魚外殼採用eval'd輸出從另一個EXE

function uru 
    set -x URU_INVOKER fish 

    # uru_rt must already be on PATH 
    uru_rt $argv 

    if test -d "$URU_HOME" -a -f "$URU_HOME/uru_lackee.fish" 
    source "$URU_HOME/uru_lackee.fish" 
    else if test -f "$HOME/.uru/uru_lackee.fish" 
    source "$HOME/.uru/uru_lackee.fish" 
    end 
end 

此功能。該uru功能提供基於golang跨平臺版本的紅寶石管理器工具https://bitbucket.org/jonforums/uru

在bash的系統,我通過把eval "$(uru_rt admin install)"在啓動文件中,這樣uru是存在於殼中注入uru功能。

在魚,運行eval (uru_rt admin install)獎勵我這個失敗

$ eval (uru_rt admin install) 
Missing end to balance this begin 
- (line 1): begin; function uru set -x URU_INVOKER fish # uru_rt must already be on PATH uru_rt $argv if test -d "$URU_HOME" -a -f "$URU_HOME/uru_lackee.fish"  source "$URU_HOME/uru_lackee.fish" else if test -f "$HOME/.uru/uru_lackee.fish"  source "$HOME/.uru/uru_lackee.fish" end end 
      ^
from sourcing file - 
    called on line 60 of file /usr/share/fish/functions/eval.fish 

in function 「eval」 
    called on standard input 

source: Error while reading file 「-」 

我也試着set u1 (uru_rt admin install); eval "$u1"具有相同的結果。

正如所料,當我做uru_rt admin install > ~/.config/fish/functions/uru.fishuru功能變得持久可用。雖然這是一種選擇,我的選擇是使用~/.config/fish/config.fish

eval作爲一個小白魚,我該如何動態地注入這個uru功能到使用eval類似bash的eval "$(uru_rt admin install)"環境?

回答

3

魚的eval是圍繞其source內置的包裝功能,似乎有一些古怪(甚至一個bug)用了怎麼回事的說法分裂當你通過多條線路..

然而,在這種情況下,它如果您只使用source,就像uru_rt admin install | source那樣更簡單,更快速並且實際工作。

儘管確實需要調用uru_rt admin install - 如果它只是將該代碼打印到stdout而不更改它,也可以簡單地保存該函數,例如,在〜/ .config/fish/functions/uru.fish中。

+0

您的uru_rt管理員安裝|源'作爲'〜/ .config/fish/functions/uru.fish'的非持久替代方式從'〜。/ config/fish/config.fish'完美工作。 – Jon