Pewna conajmniej dyskusyjna cecha pdksh

Tomasz Kłoczko kloczek w rudy.mif.pg.gda.pl
Pią, 15 Lut 2002, 21:16:25 CET


W manie do ksh stoi coś takiego:

   Aliases

       There are two types of aliases: normal command aliases and tracked
       aliases. Command aliases are normally used as a short hand for a 
       long or often used command. The shell expands command aliases
       (i.e., substitutes the alias name for its value) when it reads the
       first word of a command. An expanded alias is re-processed to check
       for more aliases. If a command alias ends in a space or tab, the
       following word is also checked for alias expansion. The alias
       expansion process stops when a word that is not an alias is found,
       when a quoted word is found or when an alias word that is currently
       being expanded is found.

       The following command aliases are defined automatically by the 
       shell:
              autoload='typeset -fu'
              functions='typeset -f'
              hash='alias -t'
              history='fc -l'
              integer='typeset -i'
              local='typeset'
              login='exec login'
              newgrp='exec newgrp'
              nohup='nohup '
              r='fc -e -'
              stop='kill -STOP'
              suspend='kill -STOP $$'
              type='whence -v'

W powyższej liście jest alias "stop" no i miałem można powiedzieć pecha.  
Otóż zmodyfikowałe przy ostanim rel skrypt startowy do ucd-snmpd
wydzialajac stop i start w funkcje. Próby u siebie robiłem akurat majac
pzrestawionego jeszcze po próbach z pzred kilku dni /bin/sh na /bin/zsh.
Efekt był taki że w miejscu gdzie w skrypcie stało

stop() {

dochodziło do próby wykonaniaw efekcie rozwiniecia "kill -STOP () {"
co oczywiście powodowało błąd.

Rozmawiałem o tym przed chwilą z Arkiem i mam wątpliwości. Otóż Arek
powidział że niby stop jest nazwą mocno "generic" i mam o co mieć w sumie
pretensji i/lub że sliasy można sobie jak ktoś chce pousuwac. Popatrzyłem
jeszcze chwilę jak to wyglada w innych shellach. Otóż lecąc przez basha,
zsh, i ksh93 nigdzie tak "wysokopoziomowego" zestawu aliasów nie ma. ksh93
który można przypuszczać że jest najbliżej POSIX sh nie ma wogóle żadnych
domyślnych aliasów. Kwestia _w tym wypadku_ w tym że te akurat powyższe
aliasy są zaszyte bezpośrednio na poziomie kodu źródłowego pdksh. IMHO
może nie byłby nic wielkiego gdyby pojawiały jeżeli pdksh jest uruchamiany
jako interactiv shell ale w sytuacji kiedy jest uruchamiany jako
interpreter skryptów _żadne_ aliasy jednak nie powinny być tu obecne.

Zmiany w skrypcie jakie chciałem zrobić miały na celu umozliwienie
śledzenia takze i restart (sh -x ./skrypt restart) a także wyodrębnienie
stop, start w funkcje powodowałyby że nie byłby uruchamiany dodatkow dwa
razy pdksh przy restart.

Zamierzam usunąć te domyślne aliasy.

Czy ktoś widzi w powyższym zamiarze coś niepoprawnego ?

kloczek
-- 
-----------------------------------------------------------
*Ludzie nie mają problemów, tylko sobie sami je stwarzają*
-----------------------------------------------------------
Tomasz Kłoczko, sys adm @zie.pg.gda.pl|*e-mail: kloczek w rudy.mif.pg.gda.pl*



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