Передача переменных окружения в XMonad spawn

Насколько я понимаю, при вызове spawn "string command" в xmonad аргумент "string command" фактически передается /bin/sh. Есть ли способ изменить это поведение?

В частности, можно ли сделать так, чтобы экземпляр интерпретатора, вызываемый spawn, знал о некоторых предопределенных переменных среды (обычно SSH_AUTH_SOCK и SSH_AGENT_PID)? Конечно, всегда можно прибегнуть к spawn "$VARIABLE=stuff; export $VARIABLE; string command", но меня смущает, что вариабу приходится каждый раз создавать и экспортировать.


person Hugo Raguet    schedule 01.06.2015    source источник


Ответы (1)


Строго отвечая на ваш первый вопрос, функция safeSpawn в XMonad.Util.Runxmonad-contrib) будет запускать команду, не передавая ее в оболочку.

Однако это не должно иметь большого значения в том, что касается переменных среды. В обоих случаях порожденная команда должна наследовать среду процесса XMonad (которую в случае порождения могут изменить файлы startup/rc оболочки).

Можно установить среду запущенного процесса с помощью общих средств Haskell, например. System.Posix.Process.executeFileSystem.Environment.getEnvironment, если вы хотите сделать модифицированную копию среды процесса XMonad).

person fizzie    schedule 08.10.2015
comment
Спасибо за информацию. Теперь предположим, что я уже запустил процесс и хотел бы передать переменные среды в среду процесса XMonad (если это имеет смысл). Кажется, что System.Posix.Process.executeFile — правильный инструмент, но не могли бы вы привести простой пример того, как я могу его использовать? Предположим, я создал файл с $VARIABLE=stuff; export VARIABLE, если это поможет. - person Hugo Raguet; 12.10.2015