![如何在字符串中调用shell函数? (重击)](https://linux22.com/image/56124/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E8%B0%83%E7%94%A8shell%E5%87%BD%E6%95%B0%EF%BC%9F%20%EF%BC%88%E9%87%8D%E5%87%BB%EF%BC%89.png)
我想在字符串中调用 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