Qual dos seguintes códigos será executado no mesmo processo do shell atual?

6

{ echo "Hello World"; } >outputfile

( echo "Hello World" ) >outputfile

C. ./anothershell.sh

D. /bin/echo "Hello World"

Qual é o certo? E que tipo de comando pode ser executado no mesmo processo do shell atual?

    
por H Han 13.03.2015 / 10:38

3 respostas

10

Você já perguntou algumas vezes sobre como provar isso. Você usa a configuração da variável de ambiente como uma sonda:

export testvar=nope
{ echo "Hello World"; export testvar=yep; } >outputfile
printenv testvar

escreve yep

export testvar=nope
( echo "Hello World"; export testvar=yep; ) >outputfile
printenv testvar

escreve nope

Você precisará editar seu script em (C) e compilar um eco modificado para (D), mas as construções correspondentes para eles também escreverão nope . Isso mostra explicitamente que apenas o caso (A) e o caso de glennjackman (E) dos comentários executado no mesmo processo.

    
por 13.03.2015 / 18:16
14

Somente A será executado dentro do processo do shell atual.

B será executado em um subshell porque você solicitou um subshell usando paranehteses.

C e D serão executados fora do processo de shell atual porque são invocações de comandos externos.

    
por 13.03.2015 / 11:16
4

Uma distinção que você pode estar perdendo é que B irá se separar (então é outro processo), mas na verdade não é exec (é uma cópia do mesmo shell, ele não vai e encontra / bin / sh e re -run inicializadores etc). E existem regras especiais ($$ é o pid do shell original, por exemplo).

    
por 13.03.2015 / 14:14

Tags