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