Alterar papel de parede com comando de terminal no macOS

Alterar papel de parede com comando de terminal no macOS

É possível alterar o papel de parede através da linha de comando com o comando

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "<absolute_path_to_file>"'

onde, claro, <absolute_path_to_file>é apenas um espaço reservado para o caminho completo da imagem a ser usada como plano de fundo.

Estou tentando usar este comando para escrever uma função zsh, mas estou tendo alguns problemas para descobrir como escapar do nome da variável (por ex $1) para obter a substituição adequada. Por exemplo, usando a função

change_wallpaper () { osascript -e 'tell application "Finder" to set desktop picture to POSIX file "$1"' }

e então

$ change_wallpaper /Users/noibe/Wallpapers/wallpaper.jpg

não funciona e recebo o erro:

33:48: execution error: Finder got an error: AppleEvent handler failed. (-10000)

provavelmente porque $1não está sendo substituído pelo caminho, mas é passado como uma string literal. Como posso fazer isso funcionar?

Responder1

A expansão de parâmetros não pode ocorrer entre aspas simples.

Tentar:

change_wallpaper() {
    osascript -e 'tell application "Finder" to set desktop picture to POSIX file "'"$1"\"
}

Responder2

Consegui fazer funcionar, escapando das aspas duplas e trocando as aspas simples por aspas duplas:

change_wallpaper() {
    osascript -e "tell application \"Finder\" to set desktop picture to POSIX file \"$1\""
}

informação relacionada