Aqui está uma experiência prática que faz exatamente o que você perguntou; ele executa bash
, define uma variável de ambiente, inicia tcsh
e altera seu valor. Em seguida, ele verifica o valor em bash
.
#!/bin/bash
export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"
tcsh -c 'echo $SPORT; setenv SPORT archery; echo $SPORT'
printf 'SPORT is "%s"\n' "$SPORT"
A execução deste script bash
, que invoca tcsh
, resultará em
SPORT is "baseball"
baseball
archery
SPORT is "baseball"
Mas nem precisamos mudar para tcsh
para ver isso em ação, basta introduzir um subshell, que tem um ambiente separado, com (...)
em nosso script bash
:
#!/bin/bash
export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"
(
echo "$SPORT"
export SPORT=archery
echo "$SPORT"
)
printf 'SPORT is "%s"\n' "$SPORT"
A saída permanecerá a mesma.
É impossível que um ambiente afete outro com uma exceção : Um novo ambiente herda variáveis de ambiente do ambiente pai. Um subshell (como no último exemplo) também herda variáveis de shell não exportadas.