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.

Author: codeforester, 2009-05-24

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.

 146
Author: Charlie Martin,
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 . Jak LESS, 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 z set i shopt, 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.
 105
Author: lhunath,
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.

 10
Author: Adam Rosenfield,
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.

 1
Author: Sionide21,
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