我正在尝试编写一个重新加载给定chrome选项卡的bash脚本,并且我将变量POSITION_STRING
传递给applescript以动态确定语句的定义(因为我认为是什么heredocs符号用于做)。
但似乎Applecript拒绝这种内涵,有帮助吗?
declare -A POSSIBLE_POSITIONS
POSSIBLE_POSITIONS=(
["1"]="first"
["2"]="second"
["3"]="third"
["4"]="fourth"
["5"]="fifth"
["6"]="sixth"
["7"]="seventh"
["8"]="eighth"
["9"]="ninth"
["10"]="tenth"
)
# echo "${POSSIBLE_POSITIONS[$1]}"
POSITION=$1
POSITION_STRING=${POSSIBLE_POSITIONS[$POSITION]}
# echo $POSITION_STRING
/usr/bin/osascript <<EOF
log "$POSITION_STRING" # this works!
tell application "Google Chrome"
tell the "$POSITION_STRING" tab of its first window
# reload
end tell
end tell
EOF
答案 0 :(得分:1)
AppleScript的对象说明符接受基于整数的索引就好了。绝对不需要使用first
,second
等关键字,并且您正在为自己挖掘一个洞,试图将它们变成AppleScript代码。
使用osascript
时,将参数传递到AppleScript的正确方法是将它们放在文件名后面(如果有的话)。然后,osascript
会将这些参数作为文本值列表传递给AppleScript的run
处理程序,然后您可以根据需要提取,检查,强制等等。
示例:
POSITION=1
/usr/bin/osascript - "$POSITION" <<'EOF'
on run argv -- argv is a list of text
-- process the arguments
set n to item 1 of argv as integer
-- do your stuff
tell application "Google Chrome"
tell tab n of window 1
reload
end tell
end tell
end run
EOF
答案 1 :(得分:0)
此处文档中的报价规则与bash脚本正文中的报价规则不同。您的此处文档中的这一行:
leadPlayer
…扩展为(例如):
inProgress == false
...在语法上无效。删除该行tell the "$POSITION_STRING" tab of its first window
周围的引号,它应该可以工作。但是:
正如@foo所说,AppleScript可以很好地理解数字索引。无需使用英语单词索引。改用tell the "first" tab of its first window
,它可以使用任意数量的数字,而不仅仅是1到10,而且脚本会更短。
再次回应@foo,尝试将变量替换为脚本文本通常是一场失败的比赛。 (对于整数,您可以取消使用它,但是由于使用引号,它对于字符串来说会成为问题。)使您的脚本接受自己的参数,然后将其传递给$POSITION_STRING
(1)-手册页显示了如何执行此操作。请注意,参数将始终以字符串形式出现,因此,如果需要数字,则需要将其强制:
tab $POSITION
如果您的bash脚本刚刚转过来并调用osascript
(1),则可以进一步:/usr/bin/osascript - "$POSITION" <<'EOF'
on run argv -- argv is a list of text
set n to item 1 of argv as integer
tell application "Google Chrome"
tell tab n of window 1 …
作为Unix解释器的功能非常好,因此您可以重写您的像这样的脚本:
osascript
将其单独保存在文件中,将其标记为可执行文件,而Bob是您的叔叔。 (除非您需要bash function ,否则在这里doc是一个合理的选择。)