which

Pawel Wilk siefca w gnu.org
Czw, 26 Lut 2004, 16:14:05 CET


On Thu, Feb 26, 2004 at 02:14:47PM +0100, Andrzej Krzysztofowicz wrote:
[...]
> > co jest do wypieprzenia?
> 
> Nic ?
> Jeden jest dla powlok interaktywnych, a drugi dla nieinteraktywnych ?

Może się mylę, ale..

z manuala do Bash:

       Gdy  bash  wywoływany  jest  jako  powłoka zgłoszeniowa lub jako
       powłoka nie-interaktywna z opcją --login, w pierwszej kolejności
       czyta  i  wykonuje  polecenia z pliku /etc/profile, jeśli takowy
       istnieje.  Po  odczytaniu  tego  pliku,  szuka  ~/.bash_profile,
       ~/.bash_login  i ~/.profile, w tej kolejności, po czym odczytuje
       i wykonuje polecenia z pierwszego istniejącego  i  dającego  się
       odczytać.    Można   posłużyć   się  opcją  --noprofile  podczas
       uruchamiania powłoki, by zakazać takiego zachowania.

	[...]

       Jeżeli uruchamiana jest powłoka interaktywna nie będąca  powłoką
       zgłoszeniową, bash czyta i wykonuje polecenia z ~/.bashrc, jeśli
       taki plik istnieje.   Może  to  być  zakazane  za  pomocą  opcji
       --norc.  Opcja --rcfile plik wymusi odczyt i wykonanie poleceń z
       pliku zamiast z ~/.bashrc.

W domyślnych plikach z /etc/skel mamy przywoływanie zawartości /etc/bashrc
(w .bashrc), a także przywoływanie zawartości /etc/bashrc (z .bash_profile).

Jeśli cokolwiek wrzucimy do /etc/profile (lub /etc/profile.d) to będzie
to wykonane przed tym co w /etc/bashrc. Więc jeśli w /etc/bashrc damy
alias to on przesłoni cokolwiek żeśmy zdefiniowali w /etc/profile.

Nie wiem, czy takie było zamierzenie, ale teraz which działa tak:

[powłoka interaktywna zgłoszeniowa]

Alias which='type -p' jest robiony z /etc/bashrc, wołane z kolei z
pliku ~/.bashrc, wołanego z ~/.bash_profile


(Ten drugi alias, z opcją --tty-only jest robiony przedtem z /etc/profile,
 gdzie mamy wywoływane /etc/profile.d/*.sh)

Więc po zalogowaniu się do systemu mam powłokę zgłoszeniową
interaktywną ale which jest 'type -p'.

Za to niektóre skrypty, które używają which żeby coś odszukać
a wcześniej ładują ~/.bash_profile, ~/.profile i /etc/profile dostają kota bo
im wyrzuca na ekran wynik opakowany w komunikaty w języku naturalnym
zamiast samej po prostu ścieżki, po tym jak wessało się /etc/profile.d/which.sh


-- 
siefca



Więcej informacji o liście dyskusyjnej pld-devel-pl