zsh robi to inaczej z $0

Tomasz Pala gotar w polanet.pl
Nie, 11 Kwi 2004, 13:13:12 CEST


On Sun, Apr 11, 2004 at 12:35:04 +0200, Arkadiusz Miskiewicz wrote:

> > Mój błąd - kropki przed ./test.sh nie zauważyłem, ale to nieistotne,
                                                      ^^^^^^^^^^^^^^^^^
> > gdyż z nią WSZYSTKIE, w tym i zsh, który jest aktualnie na ftp (nowy już
> > nie będzie), zwracają -shell, zaś bez niej - ścieżkę do skryptu.
> No widzisz, na przyszłość tak zacięcie nie broń swego bez sprawdzenia ;-)

Sprawdzałem bez kropki, ale to nie ma znaczenia; dla mnie ważna była
informacja, że wszystkie te shelle zachowują się _identycznie_, a to,
które z nich u Ciebie działają prawidłowo, a które nie, to już tylko
kwestia interpretacji (akurat wyszła na odwrót).

> > Z taką 
> > zawartością zprofile, jaką pokazałeś (setopt no_function_argzero), nie
> > ma żadnej rozbieżności między shellami (dopiero będzie z nową). Nie
[...]
> > Sprawdź, czy masz ustawioną tę opcję: setopt | grep arg
> Nie była ustawiona. Dałem zcompile /etc/zprofile ale po odpaleniu konsole(kde) 
> mając /bin/zsh jako shella w passwd:

Już wcześniej chciałem o to zapytać - a co jeśli się zalogujesz na
terminalu?

> $ zcompile /etc/zprofile
> $ ls -l /etc/zprofile*
> -rw-r--r--    1 root     root           61 2004-04-11 01:18 /etc/zprofile
> -r--r--r--    1 root     root          360 2004-04-11 12:27 /etc/zprofile.zwc
> (dla pewności przekompilowane jeszcze raz)

Na czas eksperymentów dla pewności lepiej po prostu wywalić wersję
skompilowaną.

> $ . /etc/zprofile
> (dziwne co? najpierw jest ustawienie setopt no_function_argzero, potem 
> wczytanie /etc/profile, które nic nie daje)

Nie dziwne, wręcz całkiem logiczne. Ustawienie opcji powoduje, że $0 nie
jest _zmieniane_ podczas robienia source, zatem ma _poprzednią_ wartość,
czyli "/etc/zprofile". Bez ustawienia by było "/etc/profile".

> . /etc/profile
> $ setopt |grep arg
> nofunctionargzero
> (a opcja się ustawia tak, że ...)
> $ . /etc/zprofile
> [arekm w arm ~]$
> (... drugie wywołanie . /etc/zprofile działa jak należy)

Bo dopiero tutaj `. /etc/zprofile` nie ustawiło $0 na "/etc/zprofile", a
wewnątrz `. /etc/profile` nie ustawiło $0 na "/etc/profile".

> Już nie mam pomysłu :/

A ja wiem! :D Po prostu konsole uruchamia zsh zamiast zsh -l, czyli
zwykłego interaktywnego shella zamiast login shella. Wtedy ten ostatni
nie czyta plików profile (tyle razy cytowałeś zprofile, że powinieneś
zauważyć 'for LOGIN shell';P). Już chciałem się pytać, po co w ogóle
robisz '. /etc/profile', ale chyba wiem - używasz badziewnego *terma;P

> ktoś mi to podesłał na priva:
[...]
> i tylko zsh robi to inaczej :/

Zgadza się. I jest to feature wyłączany opcją nofuncttionargzero.

> No ale w porządku, może robić sobie inaczej 
> byle działało z naszym /etc/profile.

I działa. Tylko zgodnie z definicją profile - tylko dla login shella.
Błąd masz zatem w konsole.

> > No tak:/ Cofam setup/profile.
> Gut.

Jak się ładnie cofa commita z HEAD? Jakiś merge czy może jest rollback?

> > Wczytuje. Ale zsh jest robust i ustawia $0, CHYBA ŻE zrobisz:
> >
> > ~: setopt nofunctionargzero
> > ~: . ./test.sh
> > [-zsh]
> Tylko to nie działa (patrz wyżej na moje eksperymenty z . /etc/zprofile)

A zrobiłeś tak, jak tutaj napisałem? Ustaw w command line i uruchom.
Eksperymenty wyszły źle, bo masz złe środowisko - dobrze by było w
terminalu oraz np. xtermie (wołanym zgodnie z xterm.desktop, czyli
xterm -ls), błędne zachowanie konsole z terminalami to klasyka.

-- 
GoTaR <priv0.onet.pl->gotar>
http://vfmg.sourceforge.net/



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