Obtenir le chemin du dossier parent de l'emplacement du script: Applescript

9

Contexte: j'essaie d'écrire une application applescript simple qui lancera une application tcl, mais je suis bloqué sur la première partie du script.

J'ai besoin d'obtenir le dossier parent du chemin d'accès à l'applescript. Lorsque j'exécute ce code:

set LauncherPath to path to me
set ParentPath to container of LauncherPath

... je reçois cette erreur:

error "Can’t get container of alias \"Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:\"." number -1728 from container of alias "Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:"

Après avoir lu cette réponse , j'ai essayé ceci:

set LauncherPath to path to me
set RealLauncherPath to first item of LauncherPath
set ParentPath to container of RealLauncherPath

... mais j'ai eu cette erreur:

error "Can’t get item 1 of alias \"Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:\"." number -1728 from item 1 of alias "Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:"

Toute aide ou idée très appréciée. Merci d'avance!

PS une fois que j'ai compris les problèmes ci-dessus, le script complet ressemblera à ceci:

set LauncherPath to path to me
set RealLauncherPath to first item of LauncherPath
set ParentPath to container of RealLauncherPath
set UnixPath to POSIX path of ParentPath
set launcherCrossFire to "/usr/local/bin/wish " & UnixPath & "/CrossFire.tcl > /dev/null &" -- creat command to launch CrossFire
do shell script launcherCrossFire

MISE À JOUR: Voici le script de travail intégrant la réponse ci-dessous:

set UnixPath to POSIX path of ((path to me as text) & "::") --get path to parent folder
set LaunchCrossFire to "/usr/local/bin/wish '" & UnixPath & "CrossFire.tcl' > /dev/null 2>&1 &" -- creat command to launch CrossFire
do shell script LaunchCrossFire -- run command
Simon
la source

Réponses:

17

Essayer:

set UnixPath to POSIX path of ((path to me as text) & "::")
adayzdone
la source
Merci, adayzdone! J'ai posté le code final ci-dessus dans la question d'origine. J'ai encore un problème. L'application de lancement ne se ferme pas après l'avoir exécutée. Avez-vous des idées pour contourner ce problème? Je pensais que l'envoi de la sortie vers dev / null empêcherait cela de se produire ...
Simon
Peu importe, j'ai trouvé la réponse ici . J'ai ajouté "/ dev / null 2> & 1 &" à la fin de la commande au lieu de "/ dev / null &".
Simon
1

Vous devez exécuter le script à partir d'un 'Tell Block' comme:


tell application "Finder"
get path to me

set a to container of the result
return (a as alias)
-- Or just get the name of the Parent Container like;
set b to name of a
return b
end tell
Capitainos
la source