如何解释applescript命令中的bash变量

时间:2016-09-28 16:56:26

标签: bash applescript eval osascript

我正在尝试编写一个重新加载给定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

2 个答案:

答案 0 :(得分:1)

  1. AppleScript的对象说明符接受基于整数的索引就好了。绝对不需要使用firstsecond等关键字,并且您正在为自己挖掘一个洞,试图将它们变成AppleScript代码。

  2. 使用osascript时,将参数传递到AppleScript的正确方法是将它们放在文件名后面(如果有的话)。然后,osascript会将这些参数作为文本值列表传递给AppleScript的run处理程序,然后您可以根据需要提取,检查,强制等等。

    < / LI>

    示例:

    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 周围的引号,它应该可以工作。但是:

  1. 正如@foo所说,AppleScript可以很好地理解数字索引。无需使用英语单词索引。改用tell the "first" tab of its first window ,它可以使用任意数量的数字,而不仅仅是1到10,而且脚本会更短。

  2. 再次回应@foo,尝试将变量替换为脚本文本通常是一场失败的比赛。 (对于整数,您可以取消使用它,但是由于使用引号,它对于字符串来说会成为问题。)使您的脚本接受自己的参数,然后将其传递给$POSITION_STRING(1)-手册页显示了如何执行此操作。请注意,参数将始终以字符串形式出现,因此,如果需要数字,则需要将其强制:

    tab $POSITION
  3. 如果您的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是一个合理的选择。)