env -i e bash-c

0

Alguém por favor pode me ajudar a entender a diferença entre

bash -c 'echo $SHELL $HOME $USER'

e

env -i bash -c 'echo $SHELL $HOME $USER'

Eu tentei analisá-lo muitas vezes, mas ainda não entendi. Estou estudando sobre env e bash -c aparece no exemplo. O que bash -c faz exatamente?

    
por Thomas Thompson 25.02.2016 / 01:56

1 resposta

1

env -i executa o comando especificado com um ambiente vazio.

bash -c … executa o argumento da opção -c (o ) como um trecho de código bash.

bash -c 'echo $SHELL $HOME $USER' é equivalente a echo $SHELL $HOME $USER , porque executar o bash não modifica essas variáveis (pelo menos enquanto elas forem definidas inicialmente).

env -i bash -c 'echo $SHELL $HOME $USER' corre bash com os argumentos -c e echo $SHELL $HOME $USER e com um ambiente vazio. Quando o bash inicia, ele define algumas variáveis do shell, incluindo SHELL (que é definido apenas como uma variável do shell, não exportado no ambiente de qualquer programa filho que o bash possa iniciar). Assim, quando bash analisa e expande o comando echo $SHELL $HOME $USER , as variáveis HOME e USER não são definidas, mas SHELL é definido como /bin/sh (não sei por que bash faz isso), e esse comando exibe /bin/sh seguido por dois espaços.

As aspas simples em torno do argumento bash -c garantem que o texto dentro das aspas não seja expandido pelo shell do qual você executa env -i bash -c '…' , de modo que o texto seja passado como está para o subprocesso bash.

    
por 26.02.2016 / 00:35