zsh robi to inaczej z $0

Arkadiusz Miskiewicz arekm w pld-linux.org
Nie, 11 Kwi 2004, 12:35:04 CEST


Dnia Sunday 11 of April 2004 11:21, Tomasz Pala napisał:

> 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 ;-)

> 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
> przeniosłeś przypadkiem zprofile z jakiejś starszej (względem mtime)
> wersji? Wtedy zsh nie ma jak rozpoznać, że wersja skompilowana tego
> pliku (/etc/zprofile.zwc) jest starsza i należy ładować plik źródłowy.
> 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:
$ setopt |grep arg
zsh: done       setopt |
zsh: exit 1     grep arg
(nie ma tej opcji ustawionej)
$ sudo zsh
$ 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)
$ exit
$ . /etc/zprofile
(dziwne co? najpierw jest ustawienie setopt no_function_argzero, potem 
wczytanie /etc/profile, które nic nie daje)
$ cat /etc/zprofile
# for login shell

setopt no_function_argzero
. /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)

su na samego siebie - wtedy jest ok
$ su - arekm
Password:
[arekm w arm ~]$

Już nie mam pomysłu :/

> Na Solarisie zsh 3.0.6 też zwraca [./test.sh] - dlatego nie wydaje mi
> się, żeby to zachowanie było kiedykolwiek inne. Tym bardziej, że
> dyskusje na ten temat na liście zsh są sprzed 1999 roku. Takie
> zachowanie zsh jest używane przez niektóre jego funkcje (stąd moja
> zmiana w zprofile), inne jest w trybie emulacji sh.
ktoś mi to podesłał na priva:
== ./test.sh ==
echo "[$0]"

== polecenie: ==
while read l;do ls -l $l; ( $l -c ". ./test.sh;");done </etc/shells

== Solaris na Sparcu: ==
-r-xr-xr-x   2 root     root      299496 Apr  7  2002 /sbin/sh*
[/sbin/sh]
-r-xr-xr-x   4 root     root       95488 Apr  7  2002 /bin/sh*
[/bin/sh]
-r-xr-xr-x   2 root     bin       159344 Dec  9  2002 /bin/csh*
/usr/local/bin0/.: Permission denied
-r-xr-xr-x   3 root     bin       201044 Mar 14  2003 /bin/ksh*
[/bin/ksh]
-r-xr-xr-x   1 root     bin       474736 Mar  2  2002 /bin/zsh*
[./test.sh]

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

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

> 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)

-- 
Arkadiusz Miśkiewicz     CS at FoE, Wroclaw University of Technology
arekm.pld-linux.org, 1024/3DB19BBD, JID: arekm.jabber.org, PLD/Linux



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