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
など)に保存し、そのファイルのコンテンツを操作することができます。または、xmodmap -pke
の出力(またはmodemap
のその他の出力)を(grepなどで)確認することで、現在使用されているモードマップを取得できる場合があります。