LINUX.ORG.RU
решено ФорумAdmin

Как из скрипта, вызываемого кликом мыши, экспортировать переменные окружения

 , , ,


0

1

Вопрос достаточно нубский. Есть виртуалка с дебианом (VirtualBox), в которой запускается небольшое окружение разработчика. Так как эту виртуалку могут запускать из места, где без прокси нет выхода в интернет, то сначала прописал экспорт http_proxy, https_proxy и так далее через /etc/profile.d/, но тогда не работает интернет, там где этот прокси не нужен. Поэтому я написал скрипт, который по моей задумке должен запускаться с рабочего стола (user-friendly как никак, lxqt):

#!/bin/bash

export http_proxy="http://proxy"
export https_proxy="http://proxy"
export no_proxy="127.0.0.1,localhost"

export HTTP_PROXY="http://proxy"
export HTTPS_PROXY="http://proxy"
export NO_PROXY="127.0.0.1,localhost"

Но переменные не экспортируются:

$ env | grep -i proxy
$ 

Нашел этот вопрос на SO, но там предпологается, что оно запускается из терминала, а хочется, чтобы работало через двойной клик по скрипту. Вообще возможно сделать так, чтобы пользователю не приходилось лезть в терминал?

Возможно у меня XY проблема, где можно было бы настроить прокси в настроках VirtualBox для ВМ, но тогда при смене сети придется менять настройки сети виртуалки и мне кажется легче написать два скрипта, который добавляет и убирает прокси внутри гостевой системы. Если важно хост Windows 10

Ответ на: комментарий от snake266

Я может быть что-то пропустил в unix/linux, но переопределить переменные у запущенной всей системы уже нельзя.

Только поправить в /etc/profile(/etc/profile.d/*) и перелогиниться.

https://unix.stackexchange.com/questions/681383/how-can-i-source-environment-changes-system-wide

Dimez ★★★★★
()
Ответ на: комментарий от snake266

system-wide переменных не существует, они всегда привязаны к какому-то процессу. Когда один процесс создаёт ещё один - то обычно (но не всегда - зависит от желания программистов) новый процесс наследует переменные от родительского в тот момент, когда этот новый был создан. Уже созданному процессу переменные изменить извне нельзя (он только сам себе может их менять).

В частности, переменные из /etc/profile читаются и ставятся шеллом себе на старте (но не при каждом вроде, там какие-то правила есть которые я никогда не запоминал - bashrc, profile, bash_profile в $HOME и в /etc - какой из них когда применяется).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

system-wide переменных не существует

Через некую (хотя и довольно приличную) долю допущений можно назвать system-wide переменными те, что взводятся в /etc/profile*, а те, что в .bashrc/.bash_profile - юзерские.

Dimez ★★★★★
()
Ответ на: комментарий от Dimez

А те что в /etc/bash.bashrc ?

Но автор всё равно хотел не это, а мгновенно применить изменения ко всем существующим процессам.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

Возможно у меня XY проблема, где можно было бы настроить прокси в настроках VirtualBox для ВМ, но тогда при смене сети придется менять настройки сети виртуалки и мне кажется легче написать два скрипта, который добавляет и убирает прокси внутри гостевой системы

Настрой в виртуалке прокси на 127.0.0.10:1234 и запускай на этом адресе либо NAT до настоящей внешней прокси, либо локальное прокси которое просто ретранслирует все коннекты в обычную сеть. Остановить/запустить прокси можно без изменения переменных.

firkax ★★★★★
()

Для начала внутри виртуалки нужно как-то узнать откуда она запускается. Вот пример того, как можно менять настройки на основе внешнего айпишника:

в ~/.bashrc

MY_IPS="1.1.1.1 2.2.2.2 3.3.3.3"

for i in $MY_IPS
do
    IP=`curl -s -q ifconfig.io/ip`
    if [[ $IP == $i ]]
    then
        echo "Setting proxy"
        export MY_PROXY="XXX.XXX.XXX.XXX"
    fi
done
Чтоб каждый раз не дергать инет, можно дернуть ifconfig.io один раз и прокешировать в отдельном файлике в /tmp

Либо как вариант, устанавливать переменную прокси на основе айпишника который получила виртуалка по DHCP. Выбирай какой вариант удобнее/стабильнее.

iron ★★★★★
()
Ответ на: комментарий от snake266

Обычно, когда нужен набор переменных среды, то из текущего шелла sourceят скрипт, который их экспортирует, и потом всё, что из этого шелла запускается, их наследует. Если принципиально использование грызуна, то можно сделать «ярлык» для запуска терминала с автоматической загрузкой такого скрипта.

annulen ★★★★★
()