• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Ausführungsort eines Scripts herausfinden

  • Ersteller dionysis
  • Erstellt am

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
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
- 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)

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
 

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
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
dionysis schrieb:
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)

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
 
Zuletzt bearbeitet:

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.