Fish shell 使用来自另一个 exe 的 eval 输出创建函数
Fish shell creating functions using eval'd output from another exe
在带有 fish 2.3.1 的 Ubuntu 服务器 16.10 x64 上,我的 uru_rt
exe 在 stdout
上生成此函数
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_rt admin install
。 uru
功能提供基于golang的跨平台ruby版本管理工具https://bitbucket.org/jonforums/uru
在 bash 系统上,我通过将 eval "$(uru_rt admin install)"
放在启动文件中来注入 uru
函数,以便 uru
出现在 shell 中。
关于鱼,运行宁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.fish
时,uru
函数将持续可用。虽然这是一个选项,但我更喜欢在 ~/.config/fish/config.fish
中使用 eval
作为钓鱼新手,我如何使用类似于 bash 的 eval "$(uru_rt admin install)"
的 eval
将此 uru
函数动态注入到环境中?
Fish 的 eval
是围绕其 source
内置函数的包装函数,当您传递多行时,它的参数拆分似乎有些奇怪(甚至可能是错误)..
但是,在这种情况下,如果您只使用 source
,它会更简单、更快并且实际工作,例如 uru_rt admin install | source
。
假设确实需要调用 uru_rt admin install
- 如果它所做的只是将该代码打印到标准输出,而不更改它,您也可以简单地保存函数,例如在 ~/.config/fish/functions/uru.fish.
在带有 fish 2.3.1 的 Ubuntu 服务器 16.10 x64 上,我的 uru_rt
exe 在 stdout
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_rt admin install
。 uru
功能提供基于golang的跨平台ruby版本管理工具https://bitbucket.org/jonforums/uru
在 bash 系统上,我通过将 eval "$(uru_rt admin install)"
放在启动文件中来注入 uru
函数,以便 uru
出现在 shell 中。
关于鱼,运行宁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.fish
时,uru
函数将持续可用。虽然这是一个选项,但我更喜欢在 ~/.config/fish/config.fish
eval
作为钓鱼新手,我如何使用类似于 bash 的 eval "$(uru_rt admin install)"
的 eval
将此 uru
函数动态注入到环境中?
Fish 的 eval
是围绕其 source
内置函数的包装函数,当您传递多行时,它的参数拆分似乎有些奇怪(甚至可能是错误)..
但是,在这种情况下,如果您只使用 source
,它会更简单、更快并且实际工作,例如 uru_rt admin install | source
。
假设确实需要调用 uru_rt admin install
- 如果它所做的只是将该代码打印到标准输出,而不更改它,您也可以简单地保存函数,例如在 ~/.config/fish/functions/uru.fish.