如何在字符串中调用shell函数? (重击)

如何在字符串中调用shell函数? (重击)

我想在字符串中调用 shell 函数。这是我的用例:

function envfoo() {
    env ENV_FOO=foo $@
}
function envbar() {
    env ENV_BAR=bar $@
}

$ envfoo env |egrep ENV_
ENV_FOO=foo
$ envbar env |egrep ENV_
ENV_BAR=bar
$ envfoo envbar env |egrep ENV_
env: envbar: No such file or directory
# expected result: ENV_FOO=foo and ENV_BAR=bar lines

这里我想envfoo执行envbarshell函数。我该怎么做?

command说这与忽略 shell 功能并找到真正的命令相反。


也许我举了一个错误的例子。我想像实际的可执行文件一样组合多个 shell 函数。一个真实的案例是这样的:

function be() {
    bundle exec $@
}

function envstg() {
    env RAILS_ENV=staging $@
}

$ be rails server
# launches Rails server

$ envstg be rails server
env: be: No such file or directory

这里be没有展开成bundle exec。我怎样才能扩展它们?

答案1

我不知道为什么你有这个env命令,但如果你删除它它就可以正常工作:

$ function be() {
>     echo "$@"
> }

$ function envstg() {
>     RAILS_ENV=staging "$@"
> }
$ be rails server
rails server
$ envstg be rails server
rails server

相关内容