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.