Почему изменение переменной в скрипте не изменяет ее вне скрипта?

Допустим, я export переменная с терминалом. После этого я вызываю скрипт, который изменяет эту переменную на что-то другое. Но когда я возвращаюсь к терминалу и echo к переменной, она остается в качестве исходного значения.

Что я могу сделать, если я хочу, чтобы переменная изменялась и отображалась вне скрипта, а не только в в скрипте. Вот пример того, что я хочу сказать:

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

Вывод при запуске скрипта

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:~$ 
6
задан 18 January 2012 в 05:42

4 ответа

Ваш процесс оболочки имеет копию среды родительского процесса и не имеет доступа к среде родительского процесса. Когда процесс оболочки завершает работу, любые изменения, внесенные в его среду, теряются. Выбор файла сценария является наиболее часто используемым методом настройки среды оболочки. Вы можете просто захотеть откусить пулю и сохранить один для каждого из двух вариантов оболочки.

Нашел ответ здесь

0
ответ дан 18 January 2012 в 05:42

source yourfile.sh

Это должно сделать все необходимое.

0
ответ дан 18 January 2012 в 05:42

Новый процесс получает копию каждой экспортируемой переменной.

Вам необходимо выполнить одно из:

  • выполнить все операции над одним и тем же процессом (путем получения сценария в текущей оболочке)
  • сохранить значение в общем месте sqlite, flat file) и считывайте / записывайте его из каждого процесса
0
ответ дан 18 January 2012 в 05:42

Другая возможность - создать функцию в вашем .bashrc и вызвать эту функцию в текущей оболочке; это сэкономит немного печатать. Вы все еще можете передавать переменные.

Это метод, который я использую вместо псевдонима, если мне нужно немного больше гибкости.

0
ответ дан 18 January 2012 в 05:42

Другие вопросы по тегам:

Похожие вопросы: