O que o exec $ SHELL faz?

7

Eu vi esse comando em alguns scripts de shell diferentes:

exec $SHELL -l

... geralmente como uma alternativa para:

source ~/.profile

O que exatamente o exec $SHELL -l está fazendo?

    
por Andrew 17.09.2013 / 19:55

2 respostas

7

O comando exec substitui a imagem do processo atual - o executável ou programa - por um novo, nomeado como argumento para exec. Se $ SHELL contiver o nome de um executável, como normalmente faz, exec irá girar o exe no lugar do shell em execução.

No entanto, essa é uma ação muito diferente do que apenas usar "source" para ler em um arquivo de comandos. O comando source lê o arquivo nomeado e executa o conteúdo linha por linha, como se digitado na linha de comando do shell atual.

    
por 17.09.2013 / 20:04
6

Ele está chamando seu shell ( $SHELL ) como um shell de login.

trecho da página man do Bash

-l       Make bash act as if it had been invoked as a login shell 
         (see INVOCATION below).

Sugiro ler a seção INVOCATION da man page para mais informações.

TL; DR;

A linha de fundo é que ele informa ao Bash quais arquivos devem ser usados quando ele é chamado. O $HOME/.bash_profile ( -l ) ou o $HOME/.bashrc ( -i ).

Referências

por 17.09.2013 / 19:59