我想在字符串中调用 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
执行envbar
shell函数。我该怎么做?
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