1 votos

La ruta de acceso escapada en AppleScript añade la letra /

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.

1voto

Fuzzy Purple Monkey Puntos 702

quoted form of también escapa a la tilde. quoted form of "~/Pictures" devuelve '~/Pictures' . open interpreta '~/Pictures/' como una ruta relativa, y el directorio de trabajo por defecto para do shell script es / .

No he podido conseguir que los comandos sqlite funcionen, pero prueba algo como esto:

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

O eliminar la tilde con AppleScript:

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

También puede obtener la imagen del escritorio del espacio actual con Eventos del Sistema:

tell application "System Events" to picture of current desktop

0voto

adayzdone Puntos 1258

Esta es otra forma de crear el camino:

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 …… ; \"")

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X