O arquivo tmp.sh
contém:
func() {
ls
}
Se o arquivo for originado usando source tmp.sh
, a função func
funcionará bem.
No entanto, se o sourcing for feito como cat tmp.sh | source /dev/stdin
reclamações bash:
-bash: func3: comando não encontrado
Qual é a diferença entre os dois métodos de fornecimento? Do source
ponto de vista de não deve haver nenhuma diferença, pois /dev/stdin
também haveria um identificador de arquivo.
Responder1
Do bash(1):Cada comando em um pipeline é executado como um processo separado (ou seja, em um subshell).
O shell principal não tem acesso às definições de seus subshells.