W nowoczesnym systemie nie jest szczególnie często spotykane przypadki, w których ma to znaczenie, ale tak się dzieje. (W szczególności, jeśli korzystasz z operacji powłoki w vim
takiej formie :r !command
lub w !<motion>command
formie in-line .)
Co byś umieścił w ~ / .bashrc? tylko aliasy?
Wkładasz rzeczy ~/.bashrc
, które nie byłyby automatycznie dziedziczone przez podpowłoki; oznacza to głównie aliasy i funkcje, chociaż czasami masz zmienne ustawienia, które nie powinny być widoczne poza powłoką (jest to bardzo rzadkie). Można argumentować, że należy je jakoś wyeksportować, ale różne próby eksperymentalne napotkały problemy ze zgodnością z próbą ukrycia ich w środowisku i zostały w większości porzucone.
Jeśli chcę ustawić zmienną środowiskową i dodać ją do ŚCIEŻKI (na przykład JAVA_HOME), gdzie byłoby to najlepsze miejsce na wpis eksportu? w ~ / .bash_profile lub ~ / .bashrc?
Wstawiasz ustawienia środowiska ~/.bash_profile
, aby otrzymywały zdrowe ustawienia początkowe. Czasami będziesz chciał je zastąpić (często dzieje się tak w skomplikowanych środowiskach, takich jak Matlab lub Cadence); jeśli wprowadzisz ustawienia środowiska, ~/.bashrc
wówczas powłoki uruchamiane z tych środowisk utracą możliwości dostosowywania środowiska, w wyniku czego rzeczy mogą nie działać poprawnie. Dotyczy to również sytuacji, gdy używasz pakietu takiego jak moduły , virtualenv , rvm itp. Do zarządzania wieloma środowiskami programistycznymi; wprowadzenie ustawień ~/.bashrc
oznacza, że nie możesz uruchomić żądanego środowiska z poziomu edytora, ale zamiast tego zostaniesz zmuszony do domyślnych ustawień systemu.
Uważam, że w powłoce niezalogowanej plik ~ / .bash_profile nie jest „odbierany”.
To jest poprawne; zwykle chcesz, aby początkowa powłoka była powłoką logowania, a wszelkie powłoki uruchomione pod tą powłoką nie były powłokami logowania. Jeśli początkowa powłoka nie jest powłoką logowania, nie będziesz mieć ustawień domyślnych PATH
ani różnych innych ustawień (w tym twojego JAVA_HOME
przykładu).
Większość środowisk pulpitu uruchomionych z menedżerów ekranów (to znaczy zdecydowana większość graficznych loginów) nie konfiguruje środowiska logowania dla całego pulpitu, więc jesteś zmuszony uruchomić początkową powłokę w terminalach jako powłokę logowania. Powoduje to szereg problemów (zwłaszcza, że PATH
i dostępne dla programów uruchamianych np. Z paneli nie jest poprawnie skonfigurowany, ponieważ panel nie jest terminalem i nie działał ~/.bash_profile
), ale jest rozsądnym kompromisem, biorąc pod uwagę, że nie zawsze jest to możliwe do bezpiecznego uruchomienia ~/.bash_profile
w środowisku nieinteraktywnym na początku sesji rozpoczętej przez menedżera wyświetlania, w zależności od jego zawartości. Czasami sugeruje się umieszczenie ustawień środowiska~/.bashrc
zamiast konfigurować powłokę logowania; jak wspomniano powyżej, działa to tak długo, jak długo nie musisz zastępować tego środowiska, i powoduje dziwne przerwy, gdy musisz to zrobić.
Niedawno pomogłem zdiagnozować taki problem w systemie OS X, w którym użytkownik, który wprowadził ustawienia, ~/.bashrc
a następnie zaczął używać, rvm
a Perlbrew zobaczył dziwne zachowanie, ponieważ środowiska skonfigurowane przez te dwie funkcje zostały „cofnięte” przez ~/.bashrc
edytory wewnętrzne i sudo
(które w systemie OS X , w przeciwieństwie do Linuksa, propaguje użytkownika, $HOME
aby ~/.bashrc
był uruchamiany przez powłokę root). Przed próbą użycia tych środowisk nie było problemu; kiedy zaczęli ich używać, byli zaskoczeni niespodziewaną utratą ustawień.
modules
irvm
są narzędziami programistycznymi, podobnie jak Matlab i Cadence dla nieco innych definicji „programisty”. Proste rozwój również nie wymaga od nich, ale kiedy trzeba teście przeciwko wielu wersji Ruby, Perl lub Python wtedy naprawdę chcesz coś takiegorvm
,perlbrew
ivirtualenv
(odpowiednio) wokół, aby pomóc utrzymać to wszystko prosto.szczerze mówiąc, w dzisiejszych czasach nie ma dużej różnicy, pomimo tego, co powiedział guru.
problemem jest to, że obecnie logujemy się graficznie, a nie za pomocą powłoki logowania. w przeszłości, my, użytkownicy unixowi, lubiliśmy widzieć krótki raport o tym, co dzieje się na serwerze natychmiast po zalogowaniu - wtedy uruchamiamy X z linii poleceń - raport ten często wymaga czasu (np. 10-20 sekund). a potem nie chcemy widzieć tego samego, kiedy zaczynamy np. xterm. stąd różnica.
obecnie nie sądzę, żeby to rozróżnienie było teraz ważne. myślę, że w dzisiejszych czasach, jeśli umieścisz bashrc w bash_profile, nikt nie może cię winić.
Uwaga: nie dotyczy to Macos X (każde uruchomione terminal.app jest powłoką logowania)
źródło
~/.bash_profile
nie ma źródła,~/.bashrc
jest raczej trudna w obsłudze i pogarszająca się . Graficzne aplikacje terminalowe oznaczają, że łatwiej jest po prostu pobrać ~ / .bashrc i umieścić tam całą konfigurację.Cóż, jeśli chodzi o „Graficzne loginy”, zależy to od tego, jakiego * DM używasz ...
Z GDM (Gnome 3.18) mam to:
/ etc / gdm / Xsession
Więc ~ / .profile jest uzyskiwane podczas logowania przy użyciu / bin / sh, a nie / bin / bash
Istnieją dwa przypadki
Zatem profil / bin / sh to ~ / .profile, a nie ~ / .bash_profile, ~ / .zprofile
Ten plik powinien być używany do ustawień „niezależnych od powłoki” , takich jak ścieżka i zmienne środowiskowe.
NO wykonywalny program do logowania-jedyne interakcji użytkownika powinno być, ale tutaj (sprawdzenie poczty, majątek, etc ...)
~ /.* rc są przeznaczone tylko do sesji „interaktywnych” (na przykład aliasy ...)
Istnieje różnica między bash i zsh dla interaktywnych powłok logowania
źródła bash tylko .bash_profile, podczas gdy źródła zsh w kolejności:
Odpowiedzi na to, jak zrobić ~ / .bash_profile, tutaj:
Różnica między .bashrc i .bash_profile
Aby włączyć test (i profilowanie), możesz użyć tego
~ / .bash_profile:
~ / .zprofile:
następnie, aby przetestować:
Tak więc RVM / virtualenv powinien przejść do ~ / .profile, IMHO
Ale to NIE DZIAŁA , czasami ...
Na przykład virualenvwrapper działa tylko wtedy, gdy powłoka z uruchomionym Xsession jest „oryginalną” wersją bash (eksportowanie BASH_VERSION)
Jeśli jesteś na desce rozdzielczej systemu, zmienna i praca ustawienie ścieżki, ale virualenvwrapper definicja funkcji nie działają, ponieważ skrypt nie jest zgodny z POSIX.
Skrypt nie podaje żadnego błędu, ale kończy się bez definicji „workon” .
Możesz więc ustawić dostępne środowisko w ~ / .profile , aby umożliwić prawidłowe wykonanie Pythona z klienta uruchomionego bezpośrednio z X:
https://gist.github.com/datagrok/2199506
https://www.bountysource.com/issues/9061991-setting-up-your-computer-virtualenvwrapper-linux-all
Ale dla virualenvwrapper masz dwie alternatywy:
Oznacza to, że klienci X (na przykład emacs) powinni być uruchamiani z powłoki terminala, a nie z graficznej!
„Nie mogę uzyskać satysfakcji ...”
źródło