
Digamos que eu seja export
uma variável com o terminal. Depois disso eu chamo um script que altera essa variável para outra coisa. Mas quando volto ao terminal e echo
à variável, ela permanece com seu valor original.
O que posso fazer se quiser que a variável seja alterada e visível fora do script, não apenas láemo roteiro. Aqui está um exemplo do que 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 $1 | 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:~$
Responder1
Seu processo shell possui uma cópia do ambiente do pai e não tem nenhum acesso ao ambiente do processo pai. Quando o seu processo shell termina, todas as alterações feitas em seu ambiente são perdidas. Obter um arquivo de script é o método mais comumente usado para configurar um ambiente shell. Você pode apenas querer se arriscar e manter um para cada um dos dois tipos de shell.
Encontrei esta respostaaqui
Responder2
fonte seuarquivo.sh
Isso deve fazer o necessário.
Responder3
Outra possibilidade é criar uma função no 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 uso em vez de um alias se precisar de um pouco mais de flexibilidade.
Responder4
Novo processo obtidocópia dede cada variável exportada.
Você precisa fazer um dos seguintes:
- faça todas as operações no mesmo processo (fornecendo o script no shell atual)
- mantenha o valor em lugar comum (sqlite, arquivo simples) e leia/grave-o em cada processo