Копия из среды распространяется на суб-оболочки, так это работает:
$ export MY_VAR=200
$ bash
$ echo $MY_VAR
200
но так как это копия, вы не можете получить это значение до родительской оболочки - по крайней мере, не изменяя среду.
Звучит так, будто вы действительно хотите пойти еще дальше: создать нечто, действующее как глобальная переменная, совместно используемую «родными» оболочками, инициированными отдельно от родителя, - как ваша новая вкладка в Gnome Terminal.
В большинстве случаев ответ таков: «Вы не можете, потому что переменные среды не работают таким образом». Тем не менее, есть другой ответ, который, ну, вы всегда можете взломать что-нибудь. Один из подходов - записать значение переменной в файл, например ~/.myvar
, и затем включить его в ~/.bashrc
. Затем каждая новая оболочка будет начинаться со значения, считанного из этого файла.
Вы могли бы пойти дальше - сделать так, чтобы ~/.myvar
быть в формате MYVAR=200
, а затем установить PROMPT_COMMAND=source ~/.myvar
, что приведет к тому, что значение будет перечитываться каждый раз, когда вы получаете новое приглашение. Это все еще не совсем общая глобальная переменная, но она начинает действовать так же. Он не будет активирован до тех пор, пока не вернется приглашение, что в зависимости от того, что вы пытаетесь сделать, может быть серьезным ограничением.
И затем, конечно, следующая вещь - автоматически записывать изменения в ~/.myvar
. Это становится немного сложнее, и я собираюсь на этом остановиться, потому что на самом деле переменные среды не должны были быть механизмом взаимодействия между оболочками, и лучше просто найти другой способ сделать это.