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

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

Допустим, я 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:~$ 

решение1

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

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

решение2

источник yourfile.sh

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

решение3

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

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

решение4

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

Вам необходимо выполнить одно из следующих действий:

  • выполнить все операции в одном и том же процессе (используя скрипт в текущей оболочке)
  • сохранить значение в общем месте (sqlite, плоский файл) и читать/писать его из каждого процесса

Связанный контент