Вот мотивация для вопроса:
Я использую 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 /КШ /ЗШ /и т.д.. служба поддержки.