使用通过 xbindkeys 启动的脚本更改全局环境变量?

使用通过 xbindkeys 启动的脚本更改全局环境变量?

总结:

  • 我有一个简单的 shell 脚本,它根据环境变量的当前值,将值从翻转foobar,或反之。
  • 我用来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

这是预期的行为。程序只能为其自身及其子进程设置环境变量。

根据您的情况,您可以将当前状态存储在一个文件中(例如),然后根据该文件的内容采取行动。或者,您可以通过查看(使用 grep 等)的输出(或任何其他的输出)~/.active-modemap来获取当前使用的模式映射。xmodmap -pkemodemap

相关内容