hpasm na PLD Th

Łukasz Maśko masko w ipipan.waw.pl
Śro, 16 Wrz 2009, 11:41:33 CEST


Dnia środa, 16 września 2009, Grzegorz Pietrzak napisał:
> Zainstalowałem sobie hpasm na takim starym sprzęcie Proliant ML370.
> No i zonk bo nie chce się uruchamiać jeden ze skryptów.
> Poniżej fragment który wadzi.
> Może ktoś mo podpowiedzieć co autor miał na myśli w tym fragmencie
> skryptu, bo ja na to chyba za cieńki jestem...
>
>
> ############### począteczek wycineczka
> #first of all, I do not want any file handles
> #open other than 0,1,2
> for FILE in /proc/$$/fd/*; do
>         FD=`basename $FILE`
>         #exempt the standard file descriptor
>         [ "$FD" = "0" ] && continue
>         [ "$FD" = "1" ] && continue
>         [ "$FD" = "2" ] && continue
>         # this is a file to the script at hand
>         [ "$FD" = "255" ] && continue
>         LINKTO=`ls -o $FILE 2> /dev/null | awk '{print $10}'`
>         if [ -e "$LINKTO" ]; then
> #               echo "Closing $FD pointing to $LINKTO"
>                eval "exec $FD>&-"
>                 true
>         fi
> done
> ############## końcóweczka
>
> Ja narazie zakomentowałem wywołanie: eval "exec $FD>&-"
> i narazie działa i nie wybucha, ale co to jest?
> W postaci pierwotnej skrypt wypluwa komunikat " 10: not found"

$FD powinien zawierać deskryptor pliku otwartego do odczytu/zapisu. 
Instrukcja exec $FD>&- służy do zamknięcia tego deskryptora. Niestety, 
jeśli taką linijkę próbuje się wywołać bezpośrednio, znaczek & jest 
traktowany inaczej i dlatego do jej wykonania użyto eval.

> W odpowiednim katalogu procesu w /proc do którego się dobiera skrypt,
> nie ma pliku o nazwie "255" jest za to plik o nazwie "10".
> Zmienić w skrypcie nazwę pliku do porównania z "255" na "10" i powinno
> wystarczyć?

Nie, to nie będzie działać. Deskryptor 255 jest nieszkodliwy. Ja obstawiam, 
że błąd siedzi w $10 w linijce LINKTO=... Wynik ls jest o 1 pole za krótki 
(jest 9 pól, nie 10), więc $10 zwraca pusty string. Zacząłbym od zamiany 
tego $10 na $9.

> Czy to jest różnica między dystrybucjami, bo hpasm napisany oryginalnie
> dla jakiegoś tam RedHata, czy co innego co jest po za moimi możliwościami
> rozumienia?... :)

Wydaje się, że w tym przypadku różnica siedzi w implementacji ls i 
parametru -o.
-- 
Łukasz Maśko                                           GG:   2441498    _o)
Lukasz.Masko(at)ipipan.waw.pl                                           /\\
Registered Linux User #61028                                           _\_V
Ubuntu: staroafrykańskie słowo oznaczające "Nie umiem zainstalować Debiana"


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