Tengo el siguiente AppleScript que estoy tratando de depurar:
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
Básicamente lo que hace este script es buscar la ruta del fondo de pantalla que se muestra actualmente en mi ordenador y pasarlo como argumento a Photoshop.
La ruta que se obtiene está en la forma ~/PATH/TO/IMAGE
. Esta ruta tiene espacios en ella, por lo que he utilizado el quoted form of
para escapar de la cadena. Sin embargo, al hacerlo, la ruta de la imagen cambia a /~/PATH/TO/IMAGE
y estoy muy desconcertado de por qué añade la "/" extra al principio de la cadena. Debido a esto, el script no se ejecuta como se espera. ¿Cómo puedo escapar de la ruta pero evitar que añada la "/" extra? ¿Hay alguna forma de convertir la ruta en una ruta completa o una forma diferente de escapar la cadena?
Versión actualizada de script con corrección:
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
También quería añadir que este script sólo es relevante para OS X Mavericks (10.9) ya que la información del fondo de pantalla se ha trasladado al archivo de la base de datos en lugar de ser referenciada en el archivo com.apple.Desktop.plist como lo era en versiones anteriores de OS X. Además, mi ordenador está configurado para mostrar aleatoriamente el fondo de pantalla de una carpeta específica de mi máquina. El script puede necesitar ser ajustado dependiendo de la configuración de su ordenador.