Script Shell - Novo script que não herda valores do script pai após 'exec'

0

Eu escrevi um script de shell chamado testmain.sh :

username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

Com process.sh sendo:

echo "In subprocess the process ID is:"
echo $$
echo $username

Estou executando com ./testmain.sh .

Eu esperava que $username in process.sh fosse impresso como "ravi", pois o processo principal ( testmain.sh ) e o subprocesso ( process.sh ) compartilham o mesmo ID do processo. No entanto, vejo que nada é impresso para o nome de usuário em process.sh .

Por que a casca está se comportando assim? O que estou fazendo errado?

    
por sai 19.02.2018 / 03:38

1 resposta

0

Variáveis devem ser exportadas se forem passadas para o ambiente de comandos externos, mesmo para comandos exec d. Caso contrário, você terá que source do script.

Então:

export username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

Ou:

username="ravi"
echo "The main ProcessId: "
echo $$
. ./process.sh  # source the script

Isso ocorre porque, embora exec herde variáveis de ambiente (assim como quando você normalmente executa um comando), uma variável não exportada não é adicionada ao ambiente.

    
por 19.02.2018 / 04:01