Измените глобальную переменную среды с помощью сценария, который запускается с помощью xbindkeys?

TLDR:

  • У меня есть простой сценарий оболочки, который зеркально отражает переменную среды от значения foo кому: bar, или наоборот, в зависимости от его текущего значения.
  • Я использую F12 для инициирования этого сценария, и я знаю что работы.
  • Когда сценарий инициирован, новое значение не сохраняется, когда сценарий заканчивается.

Что я делаю неправильно?

Подробнее:

1. Сценарий:

Мой сценарий проверяет, присутствует ли переменная среды или создает его при пропавших без вести:
if [ -z $COLEMAK ];then export COLEMAK="qwerty";fi

Затем сценарий зеркально отражает значение от того, чем это было к другому значению:
if [ "$COLEMAK" == "qwerty" ] then export COLEMAK="colemak" ; xmodmap ~/colemak.map else export COLEMAK="qwerty" ; xmodmap ~/qwerty.map fi

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

Я знаю, что этот сценарий только работает, когда он получен (. ~/foo.sh), и это работает хорошо от виртуального терминала.Пока все хорошо.

2. xbindkeys:

Я настроил .xbindkeysrc.scm включать (xbindkey '(F12) "term &") и это правильно выполняет команду, когда я нажимаю F12.Пока все хорошо.

Я изменил ту строку для чтения (xbindkey '(F12) ". ~/foo.sh &"). Я знаю выполнения сценария, потому что это пишет строку журнала, когда я нажимаю F12, но изменение в переменной среды не сохраняется после того, как сценарий заканчивается.

1
задан 9 January 2019 в 01:14

1 ответ

Это - ожидаемое поведение. Программа только может установить переменные среды для себя и ее дочерних процессов.

В Вашем случае Вы могли или сохранить текущее состояние в файле (как ~/.active-modemap) и действие на содержании того файла. Или Вы смогли получать в настоящее время используемый modemap путем взгляда (с grep и т.д.) в выводе xmodmap -pke (или любой другой вывод modemap).

1
ответ дан 7 December 2019 в 15:09

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

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