shell dotfiles i * rcs: jaka jest rozsądna konfiguracja?

4

Użytkownik bash będzie ostatecznie skończyć z .bashrc, .bash_profile, .profilei może trochę więcej.

Teraz każdy plik jest ładowany w określonych sytuacjach i wszystko to prowadzi do zamieszania i frustracji. Nie obchodzi mnie, która powłoka jest powłoką logowania i ty też nie powinieneś.

Chcę tylko upewnić się, że ta sama rzecz jest ładowana dla każdej rzeczy, która się wydarzy.

Więc jaki jest rozsądny sposób, aby je skonfigurować?

Zakładałbym się o rzeczy, które nie są specyficzne dla basha .profile, a niektóre źródła plików inne, itd. Co dokładnie byłoby włożone, aby osiągnąć identyczne środowisko dla każdej powłoki?

Uwaga: nie pytam, co szczególnie lubisz wkładać do plików rc, takich jak aliasy i funkcje itp. Po prostu, jak je rozłożysz, aby nie losować między nimi różnych przedmiotów.

kch
źródło
Mam tę niesamowitą książkę, Od Bash do Z Shell, i znałem idealny sposób na wydostanie się z piekła inicjalizacji powłoki, ale wszystko jest chaotyczne i losowe, i, no cóż, nie pamiętam rzeczy, które nie ma sens.
kch
Jednak niektóre polecenia, jeśli zostaną wykonane w nieterminalnej powłoce przechowującej, mogą uniemożliwić zalogowanie się na to konto.
Kent Fredric
1
Chciałbym przykład. W każdym razie jestem pewien, że w takim przypadku można go zostawić w odpowiednim pliku, aby nie uruchamiał się, gdy nie powinien.
kch
Przykładem mogą być problemy z rsync: samba.org/rsync/FAQ.html#3
innaM

Odpowiedzi:

4

Chcę tylko upewnić się, że ta sama rzecz jest ładowana dla każdej rzeczy, która się wydarzy.

Jeśli naprawdę tego chcesz, włóż wszystko ~/.profilei dodaj source ~/.profilena końcu swojego ~/.bashrc. Jeśli jest to pożądane, jest inne pytanie. Zaopatrywać ~/.profilew ~/.bashrcjest bardzo częstym setup tak.

+ ------------ + ----------------- + ------------------ - +
| | powłoki logowania | interaktywne muszle |
+ ------------ + ----------------- + ------------------ - |
| wszystkie | / etc / profile | |
| bourneish | ---------------- + -------------------- |
| muszle | ~ / .profile | |
+ ------------ + ----------------- + ------------------ - |
| tylko | ~ / .bash-profile | /etc/bash.bashrc |
| | ------------------------------------- |
| bash | ~ / .bash-login | ~ / .bashrc |
+ ------------ + ----------------- + ------------------ - +

Powłoki C i pochodne powłok używają innego zestawu plików (.login, .cshrc, ..).

Co dokładnie włożono by w każde, aby uzyskać identyczne środowisko dla każdej powłoki?

Jeśli masz na myśli środowisko w znaczeniu zmiennych środowiskowych, po prostu ustaw je wszystkie w ~ / .profile i wszystko będzie dobrze. Jeśli chodzi o środowisko w szerszym znaczeniu, to zależy.

Problem polega na tym, że nie jest pożądane, aby mieć takie samo środowisko dla interaktywnych i logujących się powłok. Przykładem są aliasy: być może potrzebujesz aliasów w interaktywnej powłoce, ale najprawdopodobniej spowodują one, że twoje skrypty będą robić dziwne rzeczy. Więc nie chcesz, aby twoje aliasy w nieinteraktywnych powłokach => wstawiły je ~./bashrc.

Ludwig Weinzierl
źródło
Rozumiem, że .profile będzie ładowany również przez sh, podczas gdy .bash_profile tylko przez bash, więc nie powinieneś umieszczać rzeczy, które działają tylko w bash w .profile. Więc właściwie umieszczam większość rzeczy w .profile, niektóre w .bashrc, a pozyskam oba w .bash_profile. Ma sens?
kch
Chociaż ta odpowiedź nie pomaga bezpośrednio, zainspirował mnie do myślenia o „A co powiesz na stworzenie nonsensownego pliku, którego nic nie rozpoznaje, takiego jak ~ / .my_shell_conf, a następnie po prostu źródło go za pomocą różnych skryptów powłoki, w których ma to sens”
Kent Fredric
@ksh: Ma absolutnie sens.
Ludwig Weinzierl
@Kent Frederic: Zgadzam się, ale myślę, że ostatecznie pozyskasz swoją ~ / .my_shell tam, gdzie pozyskuję ~ / .profile.
Ludwig Weinzierl
1
Powłoki C również odczytują pliki ~ / .cshrc.
Jonathan Leffler,
0

Naprawiam rzeczy tak, że prawie cała moja konfiguracja jest wykonywana przez powłokę logowania i prawie nic na bazie powłoki. Oznacza to, że mój .profileplik jest złożony; mój .kshrcplik (analog .bashrcdla Bash i .cshrcdla powłoki C) nie istnieje. Nigdy nie uważałem tego za problem. Oznacza to również, że powłoki niezalogowane są tak szybkie, jak to możliwe - nie szukają plików, aby analizować polecenia, których nie użyją. Może to być kac z czasów powłoki Bourne'a - kiedy nie istniały skrypty na powłokę. Ale nigdy nie znalazłem niczego, co wymagałoby tak specjalistycznego leczenia.

Jonathan Leffler
źródło