Ось мотивація питання:
Я використовую 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) - баш і (3) / (4) - тире.
- (1) та (2) відрізняються тим, що файли, які bash вибирає для завантаження, відрізняються залежно від того, чи це оболонка входу.
- (3) і (4) відрізняються тим, що (3) з’явиться в якийсь момент після входу в систему (і, отже, ~ / .profile буде створений одним із його батьківських процесів, тоді як (4) з'явиться в деяких момент, коли я не ввійшов у систему, а значить ~ / .profile не буде прочитаний.
(Я не був би здивований, якщо важливі й інші фактори, такі як оболонка інтерактивна чи ні, тому, ймовірно, є більше комбінацій, яких я навіть не очікував ... Я радий, що моє запитання "покращилося " в такому разі.)
Я б очікував, що в якийсь момент хтось, мабуть, зробив якийсь посібник, який розповість вам, як / де змінювати змінні середовища в незалежному від оболонки способі (або, принаймні, тире / баш-сумісному способі) ... Я просто можу ' не можу знайти потрібні пошукові терміни, щоб знайти такий путівник.
Рішення чи покажчики на рішення високо оцінені!
Оновлено:
- Пояснення: Це користувач Ubuntu за замовчуванням, створений процесом встановлення 12.04, тому нічого фантазійного. У нього є ~ / .profile (явно джерела ~ / .bashrc), і єдиними присутніми файлами ~ / .bash * є .bashrc, .bash_history та .bash_logout ... так що немає .bash_profile.
- Акцент на області застосування: Мені не дуже важливо будь-які оболонки, окрім інтерактивної оболонки за замовчуванням (bash) та будь-якого сценарію, який трапляється використовувати / bin / sh (aliase to dash), тому немає необхідності ускладнювати це чим-небудь додатковим для tcsh / ksh / zsh / тощо. підтримка.