TLDR:
foo
кому: bar
, или наоборот, в зависимости от его текущего значения.Что я делаю неправильно?
Подробнее:
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, но изменение в переменной среды не сохраняется после того, как сценарий заканчивается.
Это - ожидаемое поведение. Программа только может установить переменные среды для себя и ее дочерних процессов.
В Вашем случае Вы могли или сохранить текущее состояние в файле (как ~/.active-modemap
) и действие на содержании того файла. Или Вы смогли получать в настоящее время используемый modemap путем взгляда (с grep и т.д.) в выводе xmodmap -pke
(или любой другой вывод modemap
).