Como invocar a função shell em string? (bater)

1

Eu quero invocar a função shell em string. Aqui está o meu caso de uso:

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

Aqui, quero que envfoo execute a função envbar shell. Como posso fazer isso?

Digamos que seja o oposto de command , que ignora a função shell e encontra um comando real.

Talvez eu tenha dado um exemplo errado. Eu quero combinar várias funções de shell como executáveis reais. Um caso real é assim:

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

Aqui be não está expandido no pacote exec. Como posso expandi-las?

    
por knagano 22.09.2014 / 05:04

1 resposta

0

Não sei por que você tem o comando env , mas funciona bem se você removê-lo:

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

$ function envstg() {
>     RAILS_ENV=staging "$@"
> }
$ be rails server
rails server
$ envstg be rails server
rails server
    
por 22.09.2014 / 14:07

Tags