Como é possível exportar de um script originado apenas funções específicas

1

Eu tento expor de um script apenas funções específicas.
Por exemplo, digamos que eu tenha o script hello_world.sh e tenha 2 funções, hello e world :

## hello_world.sh - name of the file, not the beginning of file
hello() { echo "Hello"; }
world() { echo "World"; }

Eu quero que o script use.sh exporte apenas a função que solicito, exemplo hello . Para isso eu chamaria a função use de use.sh com um parâmetro para informar qual função eu queria exportar:
unset use hello world; . use.sh && use hello && hello && echo "Should succeed" e world || echo "Should fail and reach here because there is no such function"

Eu gostaria de evitar o armazenamento das funções em arquivos temporários para isolar ambientes diferentes (ba) sh. Armazenar em um arquivo temporário pode ser algo assim:

## use.sh - name of the file, not the beginning of file
#! /bin/sh

use() {
  local env_file="$(/bin/mktemp)"
  (. ./hello_world.sh; declare -pfx "$@") > "${env_file}"
  . "${env_file}"
  /bin/rm -f "${env_file}"
}

Como eu poderia, em vez disso, não criar arquivos (parece algum tipo de solução alternativa) e expor diretamente as funções?

    
por Lilian A. Moraru 25.05.2016 / 13:12

1 resposta

1

Você pode usar a substituição de processos , para que use se pareça com:

use() {  
  . <(. ./hello_world.sh; declare -f "$@")
}

Nota lateral:

  • declare não é POSIX, /bin/sh pode não suportar, por isso use.sh não deve ter /bin/sh no shebang. (Não que isso importe muito, pois use.sh é originado em vez de executado.)
por muru 26.05.2016 / 06:08