Как я могу изменить переменную среды во всех запущенных оболочках? - PullRequest
1 голос
/ 10 декабря 2010

Я использую Terminal.app и iTerm , которые поддерживают одновременный запуск нескольких оболочек через несколько вкладок и несколько окон.Я часто использую эту функцию, но в результате, если я хочу изменить настройку переменной среды, мне обычно приходится запускать одну и ту же команду один раз для каждой открытой вкладки и окна, а также для любых новых вкладок или окон, которыеЯ открываю в будущем.Могут ли мои оболочки взаимодействовать друг с другом таким образом, чтобы я мог один раз изменить переменную среды и распространить это изменение на все остальные мои текущие в настоящее время оболочки?файл запуска, такой как .bashrc.Я также знаю, что я могу иметь подоболочки, наследующие окружение родительских оболочек, либо нормально, либо через screen .Ни один из этих вариантов не решает этот вопрос.Этот вопрос конкретно касается динамического изменения среды нескольких работающих в настоящее время оболочек одновременно.

В идеале я хотел бы достичь этого, не записывая содержимое этих переменных на диск в любой момент.Одна из причин, по которой я хочу это сделать, заключается в том, что я могу установить конфиденциальную информацию в переменной env, например, хэшированные пароли, и обращаться к ним позже в других оболочках.Я хотел бы иметь возможность установить эти переменные один раз при входе в систему и иметь возможность ссылаться на них во всех моих оболочках, пока я не выйду из системы или пока машина не будет перезапущена.(Это похоже на то, как работает ssh-agent, но, насколько мне известно, ssh-agent будет хранить только ключи SSH, а не переменные env.)

Можно ли заставить оболочки взаимодействовать таким образом?

Ответы [ 2 ]

1 голос
/ 03 января 2011

правый. Поскольку каждый процесс имеет свою собственную копию переменных среды, вы не можете волшебным образом изменить их все сразу. Если вы достаточно согните свой ум, есть странные обходные пути.

Например, если у вас есть команда, которую вы запускаете для обновления каждой из них, вы можете автоматизировать ее выполнение. Проверьте страницу руководства bash на наличие PROMPT_COMMAND, который может запускать команду каждый раз, когда выводится приглашение bash. У большинства снарядов есть что-то похожее.

Если не помещать хешированный пароль на диск, потому что вы извлекаете его из envvar вместо чего-то вроде ssh-agent ... это будет целая другая тема.

1 голос
/ 10 декабря 2010

Если вы не напишите свою собственную оболочку, вы не сможете.ssh-agent работает так, что каждый SSH-клиент связывается с ним для получения ключей, но в большинстве обычных оболочек подобный механизм отсутствует.

...