shell script zum starten eines programms



  • unter linux benutze ich manchmal relative pfade... und da funktionieren manche programme nur richtig, wenn von einer shell gestartet wird.

    nun wollte ich ein script schreiben um ein programm (P) zu starten. das Script liegt im verzeichnis (V).

    wenn ich ein skript schreibe:

    cd /(V)
    ./(P)
    

    dann würde das zwar per mausklick das programm starten, aber die tatsache, dass ich den vollen pfad (V) angeben muss ist behindert.

    schreibe ich aller dings ein skript, dass nur ein ./(P) aufruft, dann muss ich das script aus der konsole heraus ausführen, damit im aktuellen verzeichnis gesucht wird. dadurch ist das skript als solchen sinnfrei...

    nun ist meine frage wie ich in einem shellscript, ein programm starte, dass im selben verzeichnis liegt, ohne dass ich den pfad mit angeben muss und ohne dass ich diesen script per shell ausführe.

    greetings 😃



  • indem du die PATH Variable ausnutzt, z.b. so

    #!/bin/sh
    
    export PATH=".:${PATH}"
    command
    


  • bei mir scheint die PATH Variable in /*/bin ordnern zu suchen. Meine Executable liegt in einem beliebigen Verzeichnis.

    export PATH=".:${PATH}"
    cd ".:${PATH}"
    ./sceneViewer
    
    startGui.sh: line 4: cd: .:.:/usr/lib/mpi/gcc/openmpi/bin:/home/Xerces/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:.: Datei oder Verzeichnis nicht gefunden
    

    Bei mir liegt die executable im ordner: "/home/Xerces/workspace/3d_sceneView_new"
    Ich vermute, aber dass wir dem Problem etwas näher gekommen sind. Man müsste nur irgendwie den Ordner ermitteln in dem das Script selbst liegt, aber ich kenne die Variable nicht.



  • ich weiß nicht genau, was du eigentlich machen willst. Aber in der Regel schreibt man Skripte so, dass sie den ganzen Pfad haben, wenn es nicht gerade um Basic-Tools (wie cp, mv, cat, sed. grep, awk, usw) geht. Du kannst auch eine Konfigurationsdatei anlegen.

    # config in /etc/myskript.config
    
    PROGA_PATH="/der/path/zum/programm"
    ...
    
    #!/bin/sh
    
    . /etc/myskript.config
    
    ${PROGA_PATH}/binaryfilename
    


  • naja mein ziel war halt irgendwie auf solche pathangaben zu verzichten. aber selbst PWD braucht eine offene shell, damit der aktuelle path des benutzeres ausgegeben wird.



  • dgrat schrieb:

    naja mein ziel war halt irgendwie auf solche pathangaben zu verzichten.

    wie willst auf etwas verzichten, was ein Bestandteil des gesamten Pfades ist? Es ist als würdest du fragen, wie man auf einen Zettel ohne Stift schreiben kann, oder als ob du fragen würdest, wie man auf einem Briefumschlag deine Hausadresse nur duch die Hausnummer beschreibt, ohne Strassennamen, ohne Stadtnamen und ohne Postleitzahl. 😕

    dgrat schrieb:

    aber selbst PWD braucht eine offene shell, damit der aktuelle path des benutzeres ausgegeben wird.

    jetzt muss du erklären, was du damit meinst.


Log in to reply