Około.profil bash,bashrc, a gdzie powinno być napisane alias? [duplikat]
Możliwy Duplikat: Jaka jest różnica między .bashrc,bash_profile,środowisko?
Wydaje się, że jeśli użyję
alias ls='ls -F'
Wewnątrz .bashrc na Mac OS X, wtedy nowo utworzona powłoka nie będzie miała tego aliasu. Muszę jeszcze raz wpisać bash
i ten alias będzie działał.
I jeśli zaloguję się do Linuksa na firmie hostingowej, plik .bashrc
ma linię komentarza, która mówi:
Dla niezalogowanych shell
A plik .bash_profile
ma komentarz mówiący
Dla powłoki logowania
Więc gdzie należy pisać aliasy? Jak to się stało, że oddzielamy powłokę login od non-login shell?
Niektóre strony mówią użyj .bash_aliases
, ale to nie działa na Mac OS X, jak się wydaje.
4 answers
Powodem oddzielenia powłoki login i non-login jest to, że plik .bashrc
jest przeładowywany za każdym razem, gdy uruchamiasz nową kopię Basha. Plik .profile
jest ładowany tylko wtedy, gdy logujesz się lub używasz odpowiedniej flagi, aby powiedzieć Bashowi, aby działał jako powłoka logowania.
Osobiście,
- wrzucam mój setup
PATH
do pliku.profile
(bo czasami używam innych powłok); - umieszczam swoje aliasy Basha i funkcje w moim pliku
.bashrc
; -
I put this
#!/bin/bash # # CRM .bash_profile Time-stamp: "2008-12-07 19:42" # # echo "Loading ${HOME}/.bash_profile" source ~/.profile # get my PATH setup source ~/.bashrc # get my Bash aliases
W moim
.bash_profile
pliku.
Oh, a powodem, dla którego musisz ponownie wpisać bash
, aby uzyskać nowy alias, jest to, że Bash ładuje Twój plik .bashrc
Po uruchomieniu, ale nie ładuje go ponownie, chyba że mu powiesz. Możesz przeładować plik .bashrc
(i nie potrzebujesz drugiej powłoki), wpisując
source ~/.bashrc
Który ładuje plik .bashrc
tak, jakbyś wpisywał polecenia bezpośrednio do Basha.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 16:24:17
Zobacz http://mywiki.wooledge.org/DotFiles za doskonały zasób na ten temat poza man bash
.
Podsumowanie:
- logujesz się tylko raz i wtedy
~/.bash_profile
lub~/.profile
są odczytywane i wykonywane. Ponieważ wszystko, co uruchamiasz z powłoki logowania, dziedziczy środowisko powłoki logowania, powinieneś umieścić tam wszystkie swoje zmienne środowiskowe . JakLESS
,PATH
,MANPATH
,LC_*
, ... Dla przykładu zobacz: My.profile
- po zalogowaniu można uruchomić kilka kolejnych powłok. Wyobraź sobie, że logujesz się, uruchamiasz X, A W X uruchamiasz kilka terminali z powłokami bash. Oznacza to, że Twoja powłoka logowania uruchomiła X, który odziedziczył zmienne środowiskowe Twojej powłoki logowania, który uruchomił Twoje terminale, który uruchomił Twoje powłoki bash bez logowania. Twoje zmienne środowiskowe były przekazywane w całym łańcuchu, więc powłoki bez logowania nie muszą już ich ładować. Powłoki bez logowania wykonują tylko
~/.bashrc
, nie/.profile
lub~/.bash_profile
, z tego właśnie powodu, więc tam zdefiniuj wszystko, co dotyczy tylko Basha . To funkcje, aliasy, zmienne bash-tylko takie jak HISTSIZE (to nie jest zmienna środowiskowa, nie Eksportuj jej!) , Opcje powłoki zset
ishopt
, itd. Przykład: My.bashrc
- teraz, jako część uniksowej specyfiki, powłoka login-shell nie wykonuje
~/.bashrc
, ale tylko~/.profile
lub~/.bash_profile
, więc powinieneś czerpać ją ręcznie z tego ostatniego. Będziesz zobacz, jak to robię w moim~/.profile
też:source ~/.bashrc
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-24 06:22:37
Ze strony podręcznika bash:
Gdy bash jest wywoływany jako interaktywna powłoka logowania, lub jako powłoka nieinteraktywna z
--login
opcja, najpierw odczytuje i wykonuje polecenia z pliku/etc/profile
, Jeśli ten plik istnieje. Po przeczytaniu tego pliku szuka~/.bash_profile
,~/.bash_login
, oraz~/.profile
, w tej kolejności, i czyta i wykonuje polecenia z pierwszego taki, który istnieje i jest czytelny. Na--noprofile
opcja może być używana, gdy powłoka zostanie uruchomiona, aby zahamować to zachowanie.Gdy powłoka logowania się kończy, bash odczytuje i wykonuje polecenia z plik
~/.bash_logout
, jeśli istnieje.Gdy uruchamiana jest interaktywna powłoka, która nie jest powłoką logowania, bash odczytuje i wykonuje polecenia z
~/.bashrc
, jeśli taki plik istnieje. To może zostać zahamowany za pomocą opcji--norc
. Opcja pliku--rcfile
wymusi odczyt i wykonanie poleceń z pliku zamiast~/.bashrc
.
Tak więc, jeśli chcesz uzyskać takie samo zachowanie zarówno dla powłok logowania, jak i interaktywnych powłok bez logowania, powinieneś umieścić wszystkie swoje polecenia w .bashrc
lub .bash_profile
, a następnie mieć drugi plik source jako pierwszy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-24 02:46:23
.bash_profile
jest ładowany dla "powłoki logowania". Nie jestem pewien, co by to było na OS X, ale na Linuksie to albo X11 albo wirtualny terminal.
.bashrc
jest ładowany za każdym razem, gdy uruchamiasz Basha. Tam powinieneś umieścić rzeczy, które chcesz załadować, gdy otworzysz nowy Terminal.okno aplikacji.
Osobiście umieszczam wszystko w .bashrc
, żebym nie musiał ponownie uruchamiać aplikacji, aby zmiany weszły w życie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-21 18:53:44