Il percorso di escape in AppleScript aggiunge /

1

Ho il seguente AppleScript che sto cercando di eseguire il debug:

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

Fondamentalmente ciò che fa questo script è che recupera il percorso dello sfondo attualmente visualizzato sul mio computer e lo passa come argomento per Photoshop.

Il percorso che viene recuperato è nella forma ~/PATH/TO/IMAGE . Questo percorso ha spazi in esso, motivo per cui ho usato il comando quoted form of per sfuggire alla stringa. Tuttavia, nel fare ciò il percorso dell'immagine cambia in /~/PATH/TO/IMAGE e sono molto perplesso sul motivo per cui aggiunge l'extra "/" all'inizio della stringa. Per questo motivo, lo script non viene eseguito come previsto. Come posso evitare il percorso ma impedirgli di aggiungere l'extra "/". Esiste un modo per convertire il percorso in un percorso completo o un altro modo di sfuggire alla stringa?

Versione aggiornata dello script con correzione:

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

Volevo anche aggiungere che questo script è rilevante solo per OS X Mavericks (10.9) poiché le informazioni di sfondo sono ora spostate nel file di database anziché essere referenziate nel file com.apple.Desktop.plist come era in precedenza versioni di OS X. Inoltre, il mio computer è impostato per visualizzare in modo casuale lo sfondo da una cartella specifica sul mio computer. Potrebbe essere necessario modificare lo script a seconda della configurazione del tuo computer.

    
posta Anil Natha 28.11.2013 - 06:05
fonte

2 risposte

1

quoted form of sfugge anche alla tilde. quoted form of "~/Pictures" restituisce '~/Pictures' . open interpreta '~/Pictures/' come percorso relativo e la directory di lavoro predefinita per do shell script è / .

Non sono riuscito a far funzionare i comandi sqlite, ma prova qualcosa del tipo:

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

O rimuovi 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

Puoi anche ottenere l'immagine del desktop dello spazio corrente con System Events:

tell application "System Events" to picture of current desktop
    
risposta data 28.11.2013 - 14:35
fonte
0

Ecco un altro modo per creare il percorso:

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 …… ; \"")
    
risposta data 28.11.2013 - 15:03
fonte

Leggi altre domande sui tag