Установка общесистемной переменной через udev

Есть ли способ сделать это? Кладу файл в /etc/profile.d содержания “export FOO=bar” - работfет для всех. Как то же самое сделать с помощью правила udev?
Пробовал RUN+="/home/svalx/foo.sh", в foo.sh:

#!/bin/bash
export FOO=bar

не работает…

Никак, udev не для этого. К тому же, команды udev выполняются в своём сеансе оболочки и выполнять из них экспорт бесполезно.

А systemd может это сделать? Из udev можно активировать юнит с передачей параметра - это я знаю как сделать, а вот что написать в юните…

Объясните, что вы хотите сделать на самом деле, а то велосипедов-то можно много попутно изобрести… Ибо самый правильный путь - через profile - вас почему-то не устраивает.

Хочу получить такое поведение системы: подключаю стример - вижу

$ echo $TAPE
/dev/nst0

Отключаю стример - переменная обнуляется.

Уже теплее, но всё равно неясно, зачем это нужно. Если потом какой-то скрипт анализирует эту переменную, то пусть анализирует временный файл, который можно создать и удалить с помощью того же udev. И разве udev не удаляет сам узел /dev/nst0 при отключении стримера?

Некоторые версии mt, rmt, и др., по умолчанию, если путь на задан явно, используют устройство из $TAPE. Я хочу, чтобы эта переменная устанавливалась автоматически по появлении устройства на уровне системы. Только вот никак не догадаюсь, как это сделать правильно.

например, пусть $TAPE постоянно равен какому-то /dev/tapedevice
а udev-ом уже делать линк

Интересная идея, спасибо!

А какая часть системы парсит и выполняет скрипты в /etc/profile.d во время загрузки? Может всё-таки есть способ задавать глобальные системные переменные…?

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

как я помню из генты, при обновлении profile я делал команду source /etc/profile

Спасибо за наводку, source от root запускали? А переменная не такая уж и специфичная…
Задача такая: если к системе подключается привод, то должна задаваться переменная среды, которая доступна всем. Отключили привод - переменная должна быть удалена.

Да, от рута оно в момент настройки системы происходило.

Да, я читал задачу, пока топик листал. Не стал повторять в сообщении.

Просто меня смутило то, что вам понравилась эта фраза:

например, пусть $TAPE постоянно равен какому-то /dev/tapedevice

Просто с тем же успехом можно сделать постоянную переменную. Когда привод подключен - есть доступ, когда не подключен - нет доступа.
К слову, наверное по тому же принципу в DE делаются ярлыки на подключаемые устройства?

И вообще - почему именно переменная? Почему не делать симлинки в каталоги пользователей при подключении устройства?

Старое ПО, ориентированное на работу с лентой, такое как mt, rmt, некоторые версии tar, многие скрипты и т.д. часто берут значение устройства по умолчанию их этой переменной. Так исторически сложилось…

Вот понятно.

Можно попробовать действительно просто вносит переменную через profile и делать source /etc/profile
К слову, подозреваю, что если это делать от юзера, то для конкретного юзера будут обновлены системные переменные.
К слову же, можно сделать скриптик в духе 'source /etc/profile && start_program && export $TAPE=" ’ последнее - чтобы при извлечении устройства не надо было обновлять профиль для всей системы.

Но это только догадки, надо проверять.

Вы не можете из одного экземпляра оболочки изменить переменную окружения другого экземпляра оболочки, это была бы чудовищная дыра в безопасности. Единственный путь: изменить способ запуска необходимых программ, чтобы это происходило в новом экземпляре оболочки (и тогда будут доступны и новые переменные из profile.d).

Можно даже в .bash_profile вероятно.

Разъяснили, спасибо.