Como obter funções propagadas para subshell?

6

Solaris / sh

Eu tenho algumas funções definidas em um arquivo que é carregado via

. ./some_file.sh 

Quando eu inicio um subshell com

sh

Todas as minhas definições de função são perdidas, mas quando eu faço

env

Eu vejo a fonte, existe uma maneira fácil de torná-los funcionais em minha sub-camada?

    
por dr jerry 22.02.2013 / 14:53

2 respostas

4

As funções são propagadas naturalmente para subshells :

greet () {
  echo "hello, $1"
}
( echo "this is a subshell"; greet bob )

Mas eles não são e não podem ser propagados para processos de shell independentes que você inicia invocando o shell sob seu nome.

O Bash tem uma extensão para passar funções através do ambiente , mas não há tal coisa em outros shells. Embora você possa emular o recurso, ele exige a execução de código no shell aninhado de qualquer maneira. Você também pode fornecer suas definições de função no shell aninhado.

    
por 22.02.2013 / 18:41
3

Você pode propagar as funções do bash para o bash subshells:

function greet1 {
  echo "moin, $1"
}
typeset -fx greet1

greet2() {
  echo "servus, $1"
}
typeset -fx greet2

echo "greet1 bob; greet2 alice" | bash

Saída:

moin, bob
servus, alice

Além disso, consulte o link

    
por 01.08.2017 / 15:55