Oto motywacja pytania:
Używam Ubuntu 12.04 LTS 2 z pulpitem Unity. W moim pliku .bashrc dołączam kilka katalogów do mojej zmiennej PATH i definiuję kilka zmiennych środowiskowych, takich jak JAVA_HOME. Kiedy uruchamiam aplikacje z terminala (uruchamiając bash, moją domyślną powłokę), działa to świetnie, ale w przypadku kilku skrótów, które używają programu uruchamiającego Unity, uruchamiają aplikacje, które wydają się być zdefiniowane do używania #! / Bin / sh, które jest aliasowany do / bin / dash i nie pobierają zawartości ~ / .bashrc ani ~ / .profile.
Podejrzewam, że mógłbym zmienić wszystkie te skróty na użycie / bin / bash zamiast / bin / sh, aby zmusić go do pobierania zmian .bashrc, ale wydaje się to bardzo hackerskie.
Biorąc pod uwagę, że Ubuntu 12.04 (domyślnie) aliasy / bin / sh do / bin / dash i że moją domyślną powłoką jest / bin / bash, istnieje jedno miejsce, w którym mogę wybrać modyfikację PATH i zdefiniować zmienne środowiskowe, jeśli chcę być obecnym we wszystkich tych okolicznościach:
- Ilekroć tworzę powłokę bash bez logowania (używając terminalu w jedności)
- Ilekroć tworzę powłokę bash logowania (na przykład logowanie zdalne przez ssh)
- Ilekroć korzystam z programu uruchamiającego aplikacje Unity (biorąc pod uwagę, że program uruchamiający używa / bin / sh).
- Ilekroć wykonywane jest zadanie crona (biorąc pod uwagę, że SHELL = / bin / sh w / etc / crontab).
Jeśli dobrze rozumiem, domyślam się, że:
- (1) / (2) i (3) / (4) są różne, ponieważ (1) / (2) to bash, a (3) / (4) to dash.
- (1) i (2) są różne, ponieważ pliki, które bash decyduje się załadować, różnią się w zależności od tego, czy jest to powłoka logowania.
- (3) i (4) są różne, ponieważ (3) pojawi się w pewnym momencie po zalogowaniu (i stąd ~ / .profile będzie pozyskiwany przez jeden z jego procesów nadrzędnych, podczas gdy (4) pojawi się w pewnym momencie moment, kiedy ja nie zalogowany, a więc ~ / .profile nie zostały przeczytane.
(Nie zdziwiłbym się, gdyby inne czynniki również miały znaczenie, takie jak to, czy powłoka jest interaktywna, więc prawdopodobnie jest więcej kombinacji, których nawet się nie spodziewałem ... Cieszę się, że moje pytanie "zostało ulepszone " w tym wypadku.)
Spodziewałbym się, że w pewnym momencie ktoś musiał stworzyć jakiś przewodnik, który powie ci, jak / gdzie zmodyfikować zmienne środowiskowe w sposób niezależny od powłoki (lub przynajmniej w sposób zgodny z kreską / bitem) ... po prostu mogę ' Wydaje się, że znajdziesz odpowiednie wyszukiwane hasła, aby znaleźć taki przewodnik.
Rozwiązania lub wskazówki do rozwiązań bardzo mile widziane!
Zaktualizowano:
- Wyjaśnienie: Jest to domyślny użytkownik Ubuntu utworzony w procesie instalacji 12.04, więc nic szczególnego. To nie mają ~ / .profile (jawnie źródła ~ / .bashrc), a jedynym ~ / .bash * Pliki są obecne .bashrc, .bash_history i .bash_logout ... więc nie nie ma .bash_profile.
- Nacisk na zakres: nie troszczą się o innych niż domyślnej powłoki interaktywnej (bash) i dowolnego skryptu, który zdarza się używać / bin / sh (synonim kreską) muszle, więc nie ma potrzeby, aby skomplikować to z czymś ekstra dla tcsh / ksh / zsh / itp. wsparcie.