Como criar uma função baseada em comandos ainda não definidos?

2

Eu tenho alguns scripts (que estão fora do meu controle) que carregam algumas configurações de ambiente para a minha sessão. Então sempre que eu quero carregar eu tenho que executar uma série de comandos:

export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4

Eu quero fazer isso com um único comando, então criei uma função (basicamente as linhas acima), mas não funciona.

Acho que é porque os loadApps são aliases, carregados no stuff.sh , então, no momento em que o Bash analisa minhas funções, ele ainda não conhece os aliases.

Como posso fazer isso com um único comando sem perder a portabilidade?

PS: Eu não quero copiar o alias para o meu $HOME/.bashrc , porque eles podem ser alterados em outro lugar e não vou vê-lo.

    
por RSFalcon7 29.10.2013 / 13:52

3 respostas

7

Se forem aliases, você terá que escrevê-lo:

myFunction() {
  export SOME_VAR=/path/to/main/folder
  . "$SOME_VAR/loading/stuff.sh" --quiet
  eval '
  loadApp1
  loadApp2
  loadApp3
  loadApp4'
}

aliases são expandidos no momento em que são lidos / analisados. eval força essa análise.

    
por 29.10.2013 / 15:04
3

Eu usaria um script para fazer isso apenas para estar no lado seguro:

#!/usr/bin/env bash
export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4

Salve isso no seu $PATH , torne-o executável e execute-o em vez da sua função.

    
por 29.10.2013 / 14:59
2

Não há problema em declarar uma função contendo comandos desconhecidos. Não é até que você tente executá-lo que o problema ocorra.

$ unknown() { foo; bar; baz; }
$ unknown
bash: foo: command not found
bash: bar: command not found
bash: baz: command not found
    
por 29.10.2013 / 14:05

Tags