La ruta de escape en AppleScript agrega el encabezado /

1

Tengo el siguiente AppleScript que estoy intentando 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 que recupera la ruta del fondo de pantalla que se muestra actualmente en mi computadora y lo pasa como argumento a Photoshop.

La ruta que se recupera está en la forma ~/PATH/TO/IMAGE . Esta ruta tiene espacios en ella, por lo que usé el comando quoted form of para escapar de la cadena. Sin embargo, al hacerlo, la ruta de acceso a la imagen cambia a /~/PATH/TO/IMAGE y estoy muy sorprendido de por qué agrega la "/" adicional al principio de la cadena. Debido a esto, el script no se ejecuta como se esperaba. ¿Cómo puedo escapar de la ruta pero evitar que agregue la "/" adicional? ¿Hay alguna forma de convertir la ruta en una ruta completamente calificada o una forma diferente de escapar de la cadena?

Versión actualizada del 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 quise agregar que esta secuencia de comandos solo es relevante para OS X Mavericks (10.9), ya que la información del fondo de pantalla ahora se ha movido al archivo de la base de datos en lugar de ser referenciada en el archivo com.apple.Desktop.plist como en el anterior versiones de OS X. Además, mi computadora está configurada para mostrar al azar fondos de pantalla de una carpeta específica en mi máquina. Es posible que deba modificarse la secuencia de comandos según la configuración de su computadora.

    
pregunta Anil Natha 28.11.2013 - 06:05

2 respuestas

1

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

No pude hacer funcionar los comandos de sqlite, pero intenta 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 elimine 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 de escritorio del espacio actual con Eventos del sistema:

tell application "System Events" to picture of current desktop
    
respondido por el user495470 28.11.2013 - 14:35
0

Aquí hay otra forma de crear la ruta:

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 …… ; \"")
    
respondido por el adayzdone 28.11.2013 - 15:03

Lea otras preguntas en las etiquetas