Shell 如何将文件路径参数传递给从命令行调用的osascript?

Shell 如何将文件路径参数传递给从命令行调用的osascript?,shell,applescript,osascript,Shell,Applescript,Osascript,我正在使用一个shell脚本来调用以下两行代码: iname=$(ls -d -1 $PWD/*jpg) osascript -e 'tell app "Finder" to set desktop picture to POSIX file \"$iname\"' 其中iname是一个变量,它是指向我想要的图片的绝对路径。从我所读到的内容来看,这是如何将变量传递给脚本的。但我在尝试运行这两条线路时遇到了这个错误 55:56: syntax error: Expected expressio

我正在使用一个shell脚本来调用以下两行代码:

iname=$(ls -d -1 $PWD/*jpg) 
osascript -e 'tell app "Finder" to set desktop picture to POSIX file \"$iname\"'
其中iname是一个变量,它是指向我想要的图片的绝对路径。从我所读到的内容来看,这是如何将变量传递给脚本的。但我在尝试运行这两条线路时遇到了这个错误

55:56: syntax error: Expected expression, property or key form, etc. but found unknown token. (-2741)

有人能解释一下我如何解决这个问题吗?

您正试图用单引号展开一个变量。试试这个:

osascript -e 'tell app "Finder" to set desktop picture to POSIX file "'"$iname"\"
还可以使用显式运行处理程序获取命令行参数:

osascript-e'on运行{a}
告诉应用程序“finder”将桌面图片设置为posix文件a
结束“$iname”`
如果路径可以是相对路径,则可以使用GNU
readlink
将其转换为绝对路径:

osascript-e'on运行{a}
告诉应用程序“finder”将桌面图片设置为posix文件a
结束“$(greadlink-f“$iname”)”
如果需要向脚本传递绝对路径列表,可以执行以下操作:

osascript-e'on运行
将l设置为{}
在a中用f重复
将l的末尾设置为posix文件f
结束
L
结束“$@”
如果需要将路径列表传递给脚本并将相对路径转换为绝对路径,可以执行以下操作:

osascript-e'on运行{a}
将l设置为{}
用f重复(获取a的段落)
将l的末尾设置为posix文件f
结束
L
结束“$(greadlink-f“$@”)
iname=$(set--$PWD/*jpg;[-f“$1”]&&echo“$1”)
比尝试解析
ls的输出要健壮一些。如果您知道glob将至少匹配一个文件,则可以删除
[-f“$1”]&&