我在Bash中使用osascript
通过Apple Script在通知中心(Mac OS X)中显示消息。我试图将文本变量从Bash传递给脚本。对于没有空格的变量,这可以正常工作,但不适用于带空格的变量:
定义
var1="Hello"
var2="Hello World"
并使用
osascript -e 'display notification "'$var1'"'
有效,但使用
osascript -e 'display notification "'$var2'"'
产量
syntax error: Expected string but found end of script.
我需要改变什么(我是新手)?谢谢!
答案 0 :(得分:18)
您可以尝试使用:
osascript -e "display notification \"$var2\""
或者:
osascript -e 'display notification "'"$var2"'"'
这解决了在bash中包含空格的变量的操作问题。但是,该解决方案不能防止注入osascript代码。因此,最好选择Charles Duffy's solutions之一或使用bash
参数扩展:
# if you prefer escape the doubles quotes
osascript -e "display notification \"${var2//\"/\\\"}\""
# or
osascript -e 'display notification "'"${var2//\"/\\\"}"'"'
# if you prefer to remove the doubles quotes
osascript -e "display notification \"${var2//\"/}\""
# or
osascript -e 'display notification "'"${var2//\"/}"'"'
感谢mklement0提供这个非常有用的建议!
答案 1 :(得分:11)
与试图使用字符串连接的变体不同,此版本对注入攻击是完全安全的。
osascript \
-e "on run(argv)" \
-e "return display notification item 1 of argv" \
-e "end" \
-- "$var2"
...或者,如果一个人更喜欢在stdin上传递代码而不是argv:
osascript -- - "$var2" <<'EOF'
on run(argv)
return display notification item 1 of argv
end
EOF