1 votes

Le chemin échappé dans AppleScript ajoute un /.

J'ai l'AppleScript suivant que j'essaie de déboguer :

tell application "System Events"

    set theResult to (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM data WHERE data.ROWID = 2\"") & "/" & (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM preferences JOIN data on preferences.key = 16 AND preferences.picture_id = 1 AND preferences.data_id=data.ROWID\"")

    do shell script "open -b \"com.adobe.Photoshop\" " & quoted form of theResult

end tell

En gros, ce que fait ce script, c'est qu'il récupère le chemin du fond d'écran actuellement affiché sur mon ordinateur et le passe comme argument à Photoshop.

Le chemin qui est récupéré est de la forme ~/PATH/TO/IMAGE . Ce chemin contient des espaces, c'est pourquoi j'ai utilisé l'attribut quoted form of pour échapper à la chaîne. Cependant, ce faisant, le chemin d'accès à l'image se transforme en /~/PATH/TO/IMAGE et je suis très perplexe quant à la raison pour laquelle il ajoute le "/" supplémentaire au début de la chaîne. À cause de cela, le script ne s'exécute pas comme prévu. Comment puis-je échapper au chemin mais l'empêcher d'ajouter le "/" supplémentaire. Existe-t-il un moyen de convertir le chemin en un chemin entièrement qualifié ou une autre façon d'échapper la chaîne de caractères ?

Version mise à jour du script avec correction :

tell application "System Events"

    set currentWallpaperPath to (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM data WHERE data.ROWID = 2\"") & "/" & (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM preferences JOIN data on preferences.key = 16 AND preferences.picture_id = 1 AND preferences.data_id=data.ROWID\"")

    if currentWallpaperPath starts with "~/" then set currentWallpaperPath to (system attribute "HOME") & text 2 thru -1 of currentWallpaperPath

    do shell script "open -b \"com.adobe.Photoshop\" " & quoted form of currentWallpaperPath

end tell

Je voulais également ajouter que ce script n'est pertinent que pour OS X Mavericks (10.9) car les informations sur le papier peint ont maintenant été déplacées dans le fichier de base de données plutôt que d'être référencées dans le fichier com.apple.Desktop.plist comme c'était le cas dans les versions précédentes d'OS X. De plus, mon ordinateur est configuré pour afficher de manière aléatoire le papier peint d'un dossier spécifique sur mon ordinateur. Le script peut avoir besoin d'être ajusté en fonction de la configuration de vos ordinateurs.

1voto

Fuzzy Purple Monkey Points 702

quoted form of échappe également au tilde. quoted form of "~/Pictures" renvoie à '~/Pictures' . open interprète '~/Pictures/' comme un chemin relatif, et le répertoire de travail par défaut de do shell script est / .

Je n'ai pas réussi à faire fonctionner les commandes sqlite, mais essayez quelque chose comme ça :

path=$(sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db 'select data.value from data'|tail -n1);open -b com.adobe.Photoshop "${path/#~/$HOME}"

Ou supprimez le tilde avec AppleScript :

set p to "~/Pictures"
if p starts with "~/" then set p to (system attribute "HOME") & text 2 thru -1 of p

Vous pouvez également obtenir l'image du bureau de l'espace actuel avec System Events :

tell application "System Events" to picture of current desktop

0voto

adayzdone Points 1798

Voici une autre façon de créer le chemin :

set databasePath to (POSIX path of (path to library folder from user domain as text)) & "Application Support/Dock/desktoppicture.db"
set theResult to (do shell script "sqlite3 " & quoted form of databasePath & " \"SELECT data.value FROM …… ; \"")

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X