Oto zawartość zapasów ~/.profile
dostarczonych z moim 13.10 (usunięte linie komentowane):
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Zostało to odziedziczone po Debianie, ale dlaczego Canonical zdecydował się go zatrzymać? O ile mi wiadomo, to nie jest standardowy sposób * nix i widziałem różne systemy, w których tak się nie stało, więc zakładam, że musieli mieć dobry powód. Może to powodować nieoczekiwane zachowanie podczas uruchamiania powłok logowania (takich jak na przykład sshing na maszynie), gdy użytkownik nie spodziewałby się, że to zrobi ~/.bashrc
.
Jedyną korzyścią, jaką mogę wymyślić, jest to, aby nie mylić użytkownika z wieloma plikami startowymi i pozwolić im na .bashrc
samodzielną edycję i odczytanie niezależnie od typu powłoki. Jest to jednak wątpliwa zaleta, ponieważ często przydatne są różne ustawienia logowania i interaktywnych powłok, a to blokuje ci to możliwość. Ponadto powłoki logowania bardzo często nie działają w środowisku graficznym, co może powodować błędy, ostrzeżenia i problemy (o rany!) W zależności od tego, co ustawiłeś w tych plikach.
Dlaczego więc Ubuntu to robi, czego mi brakuje?
-n "$BASH_VERSION"
być prawdą poza bashiem?.profile
źródło.bashrc
, tak nie jest we wszystkich wersjach Linuksa i zastanawiam się, jakie jest uzasadnienie.Odpowiedzi:
Jest to decyzja podjęta przez Debiana. Uzasadnienie tego wyjaśniono w tym bardzo ładnym poście na wiki , którego fragment jest fragmentem. Podsumowanie jest następujące: „aby upewnić się, że logowanie GUI i logowania inne niż GUI działają w ten sam sposób”:
źródło
Jest to standardowe zachowanie Ubuntu,
~/.bashrc
jest to plik startowy dla powłoki interaktywnej na poziomie użytkownika. Po otwarciu terminala w zasadzie uruchamiasz interaktywną powłokę bez logowania, która odczytuje~/.bashrc
zawartość~/.bashrc
i jest pobierana i eksportowana do bieżącego środowiska powłoki. Pomaga uzyskać wszystkie zmienne i funkcje powłoki zdefiniowane przez użytkownika w bieżącej powłoce. Możesz także znaleźć takie linieaby uzyskać zdefiniowane przez użytkownika aliasy w bieżącym środowisku powłoki.
Jest to ważne, aby zapewnić również wygodę użytkowania. Na przykład można by przechowywać proxy poświadczeń in
.bashrc
, chyba że się pozyskiwane żaden z wniosków końcowych ( mianowicie ,ping
,wget
,curl
,lynx
itd.) Będą działać poprawnie. Lub musisz podać poświadczenia proxy za każdym razem, gdy otwierasz terminal.Poza domyślnym Ubuntu
.bashrc
zawiera wiele przyjaznych dla użytkownika aliasów (dlals
igrep
wydrukować wyjście pokolorowany), wiele nowych definicji dla różnych zmiennych powłoki, co zwiększa wygodę użytkowników.Ale w przypadku logowania ssh lub logowania w wirtualnej konsoli , zasadniczo otrzymujesz interaktywną powłokę logowania. Tam jest plik inicjujący powłokę
~/.profile
. Dlatego jeśli nie podasz źródła~/.bashrc
, przegapisz wszystkie pomocne ustawienia w swoim.bashrc
. Dlatego domyślne~/.profile
źródło Ubuntu~/.bashrc
Sprawa do uniknięcia
~/.profile
formy~/.bashrc
w tym samym czasie, gdy~/.bashrc
jest pozyskiwana~/.profile
. Stworzy to nieskończoną pętlę sytuacji, w wyniku czego monit terminala zostanie zawieszony, chyba że naciśniesz Ctrl+ C. W takiej sytuacji, jeśli umieścisz linię w swoim~/.bashrc
Wtedy zobaczysz, że deskryptor pliku zatrzymuje się po otwarciu terminala.
źródło
.profile
pozyskiwanie jest.bashrc
? SuSe Enterprise 10 tego nie robi, podobnie jak żadna wersja Fedory, z której korzystałem, ale to było lata temu, mogę się mylić. CentOS 5.8 robi dość dziwnie. W każdym razie, rozumiesz mój punkt widzenia? To wybór projektowy i zastanawiam się, dlaczego został wykonany..bashrc
lub w.bash_aliases
. Na przykład mam pseudonim,ls
jakls --color=auto
w moim,.bashrc
i.bashrc
otrzymałem od siebie.profile
. Tutaj mogę używać aliasu nawet z ssh. Lub mógłbym użyć proxy w sesji ssh. Jeśli nie źródłowy mojej.bashrc
z.profile
stracę te cechy. Myślę, że chodzi o lepszą obsługę..bashrc
rozwiązuje. Ale to także powoduje problemy. Pamiętam, że kiedy po raz pierwszy użyłem systemu, który miał takie zachowanie, ciągle otrzymywałem te dziwne komunikatyssh
, ponieważ korzystałemxset b off
z niego,.bashrc
który wyłączał dzwonek terminala, ale tylko w systemie X, więc podawał komunikaty o błędach. Wieki zajęło mi ustalenie, co się dzieje, ponieważ nie sądziłem, że.bashrc
zostanie to odczytane podczas uruchamiania powłoki logowania. Zastanawiam się tylko, czy istnieje na ten temat „oficjalne” oświadczenie.