Вот мотивация для вопроса:
Я использую Ubuntu 12.04 LTS 2 с рабочим столом Unity. В моем файле .bashrc я добавляю несколько каталогов к моей переменной PATH и определяю несколько переменных среды, таких как JAVA_HOME. Когда я запускаю приложения из терминала (запускаю bash, мою оболочку по умолчанию), это прекрасно работает, но для некоторых из ярлыков, использующих панель запуска Unity, они запускают приложения, которые, похоже, определены для использования #! / Bin / sh, который имеет псевдоним / bin / dash, и они не получают содержимое ни ~ / .bashrc, ни ~ / .profile.
Я полагаю, что я мог бы изменить все эти сочетания клавиш, чтобы использовать / bin / bash вместо / bin / sh, чтобы заставить его воспринимать изменения .bashrc, но это выглядит очень странно.
Учитывая, что Ubuntu 12.04 (по умолчанию) использует псевдонимы / bin / sh для / bin / dash и что моя оболочка по умолчанию - / bin / bash, есть ли единственное место, где я могу изменить PATH и определить переменные окружения, если они мне нужны? присутствовать при всех этих обстоятельствах:
- Всякий раз, когда я создаю оболочку bash без входа в систему (используя терминал в единстве)
- Всякий раз, когда я создаю оболочку bash для входа (например, удаленный вход через ssh)
- Всякий раз, когда я использую модуль запуска приложений Unity (учитывая, что модуль запуска использует / bin / sh).
- Всякий раз, когда выполняется задание cron (учитывая, что SHELL = / bin / sh в / etc / crontab).
Если я правильно понимаю, я предполагаю, что:
- (1) / (2) и (3) / (4) различаются, потому что (1) / (2) - bash, а (3) / (4) - dash.
- (1) и (2) различаются, потому что файлы, которые bash выбирает для загрузки, отличаются в зависимости от того, является ли это оболочкой входа в систему.
- (3) и (4) различаются, потому что (3) придет в какой-то момент после того, как я войду в систему (и, следовательно, ~ / .profile будет получен одним из его родительских процессов, в то время как (4) придет в некоторый Точка, когда я не вошел в систему, и, следовательно, ~ / .profile не будет прочитан.
(Я не удивлюсь, если будут иметь значение и другие факторы, например, является ли оболочка интерактивной, так что, возможно, есть и другие комбинации, которые я даже не ожидал ... Я рад, что мой вопрос "улучшен" " в этом случае.)
Я ожидаю, что в какой-то момент кто-то должен был создать какое-то руководство, которое расскажет вам, как / где модифицировать переменные среды независимым от оболочки способом (или, по крайней мере, совместимым с dash / bash способом) ... Я просто могу ' Кажется, что не найти правильные условия поиска, чтобы найти такое руководство.
Решения или указатели на решения приветствуются!
Обновлено:
- Пояснение: это пользователь Ubuntu по умолчанию, созданный в процессе установки 12.04, так что ничего особенного. Это действительно есть ~ / .profile (что явно источники ~ / .bashrc), и только ~ / .bash * файлы представляют не .bashrc, .bash_history и .bash_logout ... так нет нет .bash_profile.
- Акцент на области применения: меня не волнуют никакие оболочки, кроме интерактивной оболочки по умолчанию (bash) и любого сценария, который использует / bin / sh (с псевдонимом dash), поэтому нет необходимости усложнять это чем-то дополнительным для Tcsh / КШ / ЗШ / и т.д.. служба поддержки.