macOSでターミナルコマンドを使用して壁紙を変更する

macOSでターミナルコマンドを使用して壁紙を変更する

次のコマンドを使用して、コマンドラインを介して壁紙を変更できます。

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

ここで、コースは、<absolute_path_to_file>背景として使用する画像のフルパスのプレースホルダです。

このコマンドを使用してzsh関数を作成しようとしていますが、$1正しい代替項目を取得するために変数名(exなど)をエスケープする方法を見つけるのに問題があります。たとえば、次の機能を使用します。

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\""
}

関連情報