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

时间:2013-11-18 20:24:13

标签: shell applescript osascript

我正在使用一个调用这两行代码的shell脚本:

iname=$(ls -d -1 $PWD/*jpg) 
osascript -e 'tell app "Finder" to set desktop picture to POSIX file \"$iname\"'

其中iname是一个变量,它是我想要的图片的绝对路径。从我读过的,这是如何将变量传递给osascripts。但是我在尝试运行这两行时遇到了这个错误

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

有人可以解释我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您正尝试使用单引号扩展变量。试试这个:

osascript -e 'tell app "Finder" to set desktop picture to POSIX file "'"$iname"\"

答案 1 :(得分:0)

您还可以使用显式运行处理程序来获取命令行参数:

osascript -e'on run {a}
    tell app "finder" to set desktop picture to posix file a
end' "$iname"`

如果路径可以是相对路径,则可以使用GNU readlink将其转换为绝对路径:

osascript -e'on run {a}
    tell app "finder" to set desktop picture to posix file a
end' "$(greadlink -f "$iname")"

如果需要将绝对路径列表传递给脚本,可以执行以下操作:

osascript -e'on run a
    set l to {}
    repeat with f in a
        set end of l to posix file f
    end
    l
end' "$@"

如果您需要将路径列表传递给脚本并将相对路径转换为绝对路径,则可以执行以下操作:

osascript -e'on run {a}
    set l to {}
    repeat with f in (get paragraphs of a)
        set end of l to posix file f
    end
    l
end' "$(greadlink -f "$@")"