1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Ausführungsort eines Scripts herausfinden

Dieses Thema im Forum "AppleScript" wurde erstellt von dionysis, 04.04.06.

  1. dionysis

    dionysis Gast

    Habe folgendes Problem.

    Ein Script soll von z.B. einem USB-Stick ausgeführt werden und folgendes tun

    - das Verzeichnis, aus dem es ausgeführt wurde als Systemvariable speichern
    - ein Programm in dem Verzeichnis öffnen (das liest später die Systemvariable aus und sucht in dem dort angegebenen Verzeichnis, also auf dem USB-Stick nach einer Konfigurationsdatei)

    eine Systemvariable setzen klappt schon:
    --------------
    set psidirectory to "PSIDATADIR=\"THE_FOLDER_OF_THE_SCRIPT\""
    tell application "Terminal"
    do script psidirectory
    end tell
    -------------

    diese bleibt jedoch nur solange gespeichert, bis das Terminal geschlossen wird, sollte möglichst bleiben, bis das Programm gestartet hat und diese ausgelesen hat.

    meine Konkreten Probleme:


    - wie komme ich an das Verzeichnis?
    - wie ändere ich die Systemvariable dauerhaft (also mind. bis Prog gestartet hat)
    - wie starte ich dann die spezielle Version des Programms auf dem USB-Stick(nicht eine evtl ältere Version auf der Festplatte)

    Danke im Voraus

    Robin
     
  2. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Hallo Robin,

    den Ausführungsort deines Script-Programms bekommst du mit

    Code:
    set thePath to (path to me)
    bzw. wenn es ein POSIX-Pfad sein soll, was ich annehme:

    Code:
    set thePath to (POSIX path of (path to me))
    den weiteren Verlauf deines Programms habe ich noch nicht so ganz kapiert - du startest dann ein Programm (ist es ein Commandline-Tool, Shell-Skript?), das als Variable den Pfad zum Skript übernehmen soll??? Könntest Du dann nicht vielleicht einfach dem Programm den Pfad im Aufruf mit übergeben, anstatt eine Variable zu benutzen?

    Gib mal noch'n paar mehr Infos über das, was du vorhast (wenn du kannst) - dann kann man dir vielleicht besser helfen ...

    Grüße, Daisy
     
  3. dionysis

    dionysis Gast

    danke erstmal

    erstmal danke Daisy.

    um es konkreter zu machen. Ich will ein Instant messaging Programm starten, was eine Config-Datei braucht (Zugangsdaten).

    Diese Datei wird standardmäßig irgendwo im eigenen home Verzeichnis angelegt und auch von dort beim Programmstart ausgelesen, es sei denn man gibt als Systemvariable PSIDATADIR ein anderes Verzeichnis an.

    Das soll geschehen, und zwar so, dass man den ganzen Kram (Programm und Config Datei) auf einem USB-Stick ablegen kann und überall ausführen kann, ohne das im Home-Verzeichnis was abgelegt wird.

    Das Skript soll von einem Ordner auf dem USB-Stick ausgeführt werden, den ich nicht vorher weiß, da ja der Benutzer es auf irgwndeinem Ordner auf dem USB-Stick speichern kann.

    Das Skript sieht jetzt so aus:

    ----------------------------
    set path_ to (POSIX path of (path to me) as string)

    set change_system_variable_command to "PSIDATADIR=\"" & path_ & "/default\""

    tell application "Terminal"
    do script change_system_variable_command & ";cd \"" & path_ & "Psi.app/Contents/MacOS\"" & ";./psi"
    end tell
    ---------------------------

    es wird als durch das "do script" erst die Systemvariable gesetzt,dann in das Verzeichnis path_ gewechselt (eigentlich dort in das unterverzeichnis wo das Programm liegt) und dann von dort mit ./psi das Programm gestartet .

    Leider kann ich das Programm nicht direkt aus Appleskript starten, da dort die geänderte Systemvariable nicht mehr gilt (keine Ahnung warum die nur temporär in dem geöffneten Terminal geändert wird und dort verloren geht sobald ich das Terminal schließe)

    Grüße
    Robin
     
  4. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    und funktioniert das jeztz so?
    ich denke, die Zeile:
    Code:
    do script change_system_variable_command & ";cd \"" & path_ & "Psi.app/Contents/MacOS\"" & ";./psi"
    könnte man noch etwas verkürzen auf:
    Code:
    do script change_system_variable_command & ";open \"" & path_ & "Psi.app\""
    Oder hast du mal versucht, die Variable im AppleScript mit dem Befehl
    'do shell script ..' zu setzen, anstatt das Terminal zu scripten? Ich könnte mir vorstellen (bin aber nicht sicher, nicht hauen, wenn's nicht stimmt) dass die Variable dann bei einem nachfolgenden Programmstart aus deinem AppleScript noch existiert:

    Code:
    set path_ to (POSIX path of (path to me) as string)
    
    set change_system_variable_command to "PSIDATADIR=\"" & path_ & "/default\""
    
    do shell script change_system_variable_command
    -- starte dein Programm
    
    Grüße,

    Daisy
     
    #4 Daisy, 05.04.06
    Zuletzt bearbeitet: 05.04.06
  5. dionysis

    dionysis Gast

    habe das ganze jetzt so gelöst:

    [applescript]
    set path_ to (path to me)

    tell application "Finder"
    set theFolder to (container of item path_)
    end tell

    set thePOSIXFolder to ((POSIX path of (theFolder as alias)) as string)

    set change_system_variable_command to "export PSIDATADIR=\"" & thePOSIXFolder & "\""

    do shell script change_system_variable_command & ";cd \"" & thePOSIXFolder & "bin/Psi.app/Contents/MacOS\"" & ";./psi&"

    [/applescript]

    die "container of item" - Geschichte ist vielleicht interessant für andere. Komisch ist aber, dass Systemvariablen bei mir nur mit "export VARIABLENNAME="value" " geklappt haben. Sonst konnte das Programm sie nicht auslesen. Kenne mich aber mit bash auch nicht so gut aus. Vielleicht hat das einen trivialen Grund.
     

Diese Seite empfehlen