Bendt Vinge Rasmussen wrote:
> Her er den så: den længe ventede v. 3.0 - nu med menu!
Nåda, der lærte jeg noget nyt: Jeg havde aldrig set 'dialog' kommandoen
før
Jeg har nogle kommentarer:
o Du anvender en temporær fil men sletter den ikke igen. Desuden har du
hardcodet navnet på den. Det gør ikke så meget, da programmet i forvejen er
et enkeltbrugerprogram, men for en anden gangs skyld er standard ideomet
for temporære filer:
PROGRAM=$(basename $0)
TMPFILE=$(mktemp /tmp/$PROGRAM.XXXXXX)
trap "rm -f $TMPFILE" EXIT
Den første linie finder navnet på programmet uden sti. Den anden linie
genererer et filnavn, der er garanteret til at være forskelligt fra alle
andre filnavne i /tmp ('XXXXXX' bliver erstattet med en unik streng). Den
tredje linie sørger for at filen automatisk bliver slettet, når programmet
terminerer.
o mplayer "støjer". Den skriver en masse info ud på skærmen, som ikke er så
pænt at kigge på. Du kan få det væk ved at tilføjet et '&>/dev/null' til
mplayer kommandoen. Så vil alt output fra kommandoen blive sendt ned i et
sort hul.
o Du bør også tilføje et 'clear' før du skriver hvilken station, der spiller
nu, så bunden af menuen ikke bliver hængene på skærmen.
o Du efterlyste en måde at gøre programmet mindre hardcodet på. Jeg ved ikke
om det er så god en ide. Det fine ved dit script er, at det er meget
simpelt, så det umiddelbart kan forstås. Sammenlign f.eks med python
scriptet, der også blev postet i denne tråd. Så snart du begynder at
tilføje datafiler, bliver du nødt til at tage stilling til en hel række
andre problemer, som lynhurtigt vil gøre kål på det simple i dit program:
- Hvor skal datafilen placeres ? Der findes en række _forskellige_
standarder, som du skal vælge mellem. Det naive svar vil være "i det samme
katalog som programmet selv", men det er ikke trivielt at finde ud af, hvor
et program bliver kørt fra. Specielt hvis symlinks er involveret. Ydermere
er der en del mennesker som har en ret facistisk holdning til
systemadministration (undertegnede indbefattet
og som under ingen
omstændigheder vil have datafiler liggende i ../bin kataloger.
- Så kan du lægge datafilen i et forudbestemt katalog - f.eks $HOME/etc, men
hvad nu hvis jeg har en anden ide om, hvor datafilen skal ligge ? Så skal
du have en parameter til at angive datafilens placering. Og den parameter
skal parses og valideres osv.
- Og hvad nu hvis datafilen ikke kan findes ? Du bliver så nødt til at
skrive kode som først tjekker om filen findes.
- Og hvad hvis formatet af datafilen er forkert ? Du skal altså også skrive
kode til at tjekke syntaxen af datafilen.
Osv. osv. Og lynhurtigt er dit program blevet længere og mere uforståeligt
end det python script jeg omtalte.
Men _hvis_ du insisterer er her en skitse af, hvordan du kan gøre det:
I toppen af scriptet definerer du datafilens placering:
DATAFIL=$HOME/etc/radioafspiller.dat
Før du går ind i loopet checker du at filen eksisterer:
if [ ! -f $DATAFIL ]
then # Udskriv fejlmeddelelse og afslut
fi
I 'dialog' kommandoen beder du den læse sine menu options fra en fil:
dialog --backtitle "..." --title "..." --menu 15 40 10 --file $DATAFIL
Din datafil rummer een linie pr valg, som her:
DR_P1 "DR P1"
DR_P2 "DR P2"
DR_P3 "DR P3"
Men jeg synes altså du bare skulle lade tingene være hardcodet.
-Claus