Noch ein kleiner Tipp am Rande: Nicht alle Variablen global deklarieren! Das kann schnell zu komischen Effekten führen wenn man innerhalb einer Procedure eine Variable überschreibt und diese dann außerhalb der Procedure auch abgeändert wird, da sie global ist.
Im Normalfall sollte man Variablen, welche nur innerhalb einer Procedure benötigt werden, als Protected deklarieren.
Das Beispiel von Sommertv würde ich so anpassen:
Code:
EnableExplicit
Procedure ProgramExists(program$)
Protected program=RunProgram("whereis", program$, "", #PB_Program_Open | #PB_Program_Error | #PB_Program_Read)
Protected Exitcode.s=""
If program
While ProgramRunning(program)
Exitcode= ReadProgramString(program)
Wend
CloseProgram(program)
EndIf
If Len(Exitcode) > 1+Len(program$)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Define program$="liblrdf.so.0"
If ProgramExists(program$)
Debug program$ + " existiert"
Else
Debug program$ + " existiert nicht"
EndIf
Oder alternativ eine Variante welche auch schaut, ob nach dem ":" in der Ausgabe von whereis wirklich etwas steht:
Code:
EnableExplicit
Procedure ProgramExists(program$)
Protected program = RunProgram("whereis", program$, "", #PB_Program_Open | #PB_Program_Read)
Protected output$ = ""
Protected paths$
If program
While ProgramRunning(program)
output$ + ReadProgramString(program)
Wend
CloseProgram(program)
EndIf
; output$ wenn program$ existiert:
; sh: /bin/sh /bin/sh.distrib /usr/share/man/man1/sh.1.gz
; output$ wenn program$ nicht existiert:
; foo:
paths$ = Trim(StringField(output$, 2, ":"))
; paths$ is leer wenn program$ nicht existiert (keine Zeichen hinter ":")
If Len(paths$)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Define program$="sh"
If ProgramExists(program$)
Debug program$ + " existiert"
Else
Debug program$ + " existiert nicht"
EndIf
Da der erwartete Output schon im Standardoutput steht, kann man auf das #PB_Program_Error Flag bei RunProgram() verzichten.