As funções e aliases do shell executam processos filho?

1

As funções e aliases do shell bloqueiam processos filho? Ou são ambos executados dentro do processo de shell?

    
por Bodisha 31.01.2018 / 16:41

1 resposta

4

Não.

Um alias é uma substituição simples de uma (ou mais) palavras para alguma string antes que a linha seja analisada para os tokens. Não é necessário alterar o contexto da shell.

Do manual do bash em Funções do Shell :

Shell functions are executed in the current shell context; no new process is created to interpret them.

A menos que o código que compõe a função bifurque um subprocesso, como no bash com (…) (não no ksh). Uma função pode ser definida com parênteses em vez de (ou adicionalmente a) chaves.

Teste:

#!/bin/bash
func(){ echo "$BASHPID"; }
fork()( echo "$BASHPID"; )
echo "$BASHPID"
func
fork

Em execução:

$ ./script
8731
8731
8753

Entenda a função fork como:

fork(){
        ( echo "BASHPID" )
      }
    
por 31.01.2018 / 16:56