Por que não alterar uma variável em um script a altera fora do script?

6

Digamos que eu export uma variável com o terminal. Depois disso, chamo um script que altera essa variável para outra coisa. Mas quando eu retornar ao terminal e echo da variável, ela permanece como seu valor original.

O que eu posso fazer se eu quiser que a variável seja alterada e visível fora do script, não apenas lá no script. Aqui está um exemplo do que eu quero dizer:

ares@ares-HP-ProBook-4530s:~$ export package=tree
ares@ares-HP-ProBook-4530s:~$ cat script3.sh 

#! /bin/bash
#set -x
echo $package
apt-cache show  | head -1
if [ $? -eq 0 ]; then
    package=1
else
    package=0
fi
echo $package

Saída ao executar o script

ares@ares-HP-ProBook-4530s:~$ ./script3.sh gnome-terminal
tree
Package: gnome-terminal
1
ares@ares-HP-ProBook-4530s:~$ echo $package
tree
ares@ares-HP-ProBook-4530s:~$ 
    
por user42421 17.01.2012 / 22:54

4 respostas

6

Seu processo shell tem uma cópia do ambiente do pai e não acessa o ambiente do processo pai. Quando o processo do shell terminar, as alterações feitas no ambiente serão perdidas. O fornecimento de um arquivo de script é o método mais comumente usado para configurar um ambiente de shell, você pode apenas querer morder o marcador e manter um para cada um dos dois tipos de shell.

Encontrou esta resposta aqui

    
por Zoke 17.01.2012 / 23:28
2

fonte yourfile.sh

Isso deve fazer o necessário.

    
por abhishek 17.01.2012 / 23:30
0

Outra possibilidade é criar uma função em seu .bashrc e chamar essa função dentro do shell atual; Isso economizará um pouco de digitação. Você ainda pode passar variáveis.

Este é o método que eu uso em vez de um alias, se eu precisar de um pouco mais de flexibilidade.

    
por Marty Fried 18.01.2012 / 03:35
0

Novo processo obtém cópia de cada variável exportada.

Você precisa fazer um dos seguintes:

  • faz todas as operações no mesmo processo (ao fazer o sourcing do script no shell atual)
  • mantenha o valor em um lugar comum (sqlite, arquivo simples) e leia / grave em cada processo
por Michał Šrajer 18.01.2012 / 16:11