macOS のターミナルコマンドで壁紙を変更する

macOS のターミナルコマンドで壁紙を変更する

コマンドラインから次のコマンドで壁紙を変更することができます。

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

もちろん、 は<absolute_path_to_file>背景として使用される画像の完全なパスのプレースホルダーにすぎません。

このコマンドを使用してzsh関数を記述しようとしていますが、変数名(例)をエスケープして適切な置換を行う方法がわかりません$1。たとえば、関数を使用すると

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

その後

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

動作せず、次のエラーが発生します:

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

おそらく、$1パスに置き換えられず、リテラル文字列として渡されるためです。どうすればこれを機能させることができますか?

答え1

一重引用符内ではパラメータ展開は行えません。

試す:

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

答え2

二重引用符をエスケープし、一重引用符を二重引用符に置き換えることで、動作させることができました。

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

関連情報