Executando um script bash dentro de um script bash

1

Estou escrevendo um script bash para a instalação de um gerenciador de ambiente, mas isso significa que eu tenho que instalar algo em vários diretórios. Veja minhas outras pergunta para obter mais detalhes. Mas isso me levou a repensar minha abordagem.

Eu estava pensando em criar três scripts bash separados. Então o um só chama o outro. Aqui está a coisa: eu preciso de alguns como source .bash_profile dentro do shell pai. A questão é, seria um script bash que foi chamado dentro de um script bash ser executado em um novo shell ou o shell pai ou seria em um novo shell dentro do shell de script bash do host dentro do shell pai?

'shell-ception' Eu sei que está cozinhando meu cérebro. Eu realmente gostaria de automatizar este processo e esta é a parede que estou enfrentando.

    
por TheLegend 30.05.2013 / 13:49

2 respostas

3

Se você executar um comando em um shell, ele será sempre executado como um processo filho para esse shell, a menos que

  1. é um shell embutido (como cd )
  2. é originado ( . /path/to/file , source /path/to/file )
  3. é executado via exec

Você pode verificar isso facilmente com ps -e -o pid,ppid,user,args .

source .bash_profile influencia subshells apenas se as variáveis foram marcadas para exportação (veja declare -x ).

    
por 30.05.2013 / 14:00
2

Estas são as diferenças práticas:

  • A execução de um comando faz com que o shell crie um processo filho. Qualquer variável de ambiente definida anteriormente no filho é perdida para o processo pai.

  • Usando source , o script é forçado a ser executado no processo atual (dentro do processo pai). Em seguida, as variáveis de ambiente no script permanecerão.

por 30.05.2013 / 14:13

Tags