将bash列表传递到applescript(使用osascript)

时间:2018-07-24 13:37:46

标签: bash applescript

我正在尝试将bash列表传递到applescript变量,但是它无法通过常规方法工作。

我有一个看起来像[Terminal,Utilities,Finder,Launchpad]的列表。我通过声明将bash列表传递给applescript变量:

{
  "rules": {
    ".read": "root.child('users').child(auth.uid).child('isAdmin').val() === true",
    "users": {
      "$uid": {
        ".read": "auth.uid === $uid",
        ".write": "auth.uid === $uid"
      }
    }
  }
}

这可以与我尝试通过osascript传递到applescript变量的任何其他数据结构一起使用。但是,当我记录列表中的第一项时,而不是在此示例中返回Terminal,而是返回字母“ T” 。同样,如果我记录第二个项目,它将返回字母“ e”而不是实用程序,因此似乎每个单独的字符都是列表中的一个项目。

有人有将bash列表传递到applescript变量的经验吗?谢谢。

2 个答案:

答案 0 :(得分:0)

我假设“ bash list”是指多行文本,在这种情况下,请使用paragraphs of bashList在换行符处将其拆分。

答案 1 :(得分:0)

为此:

bashList=(Terminal Utilities Finder Launchpad)

然后您可以执行以下操作:

osascript -e "set ASlist to the paragraphs of \"$(printf '%s\n' "${bashList[@]}")\""

或者,鉴于上面所有需要转义的引号,阅读起来稍微简单一些:

osascript <<OSA
    set ASlist to the paragraphs of "$(printf '%s\n' "${bashList[@]}")"
OSA

尽管,如果您知道bashList中的每个项目都只包含一个单词,那么就不需要了printf

osascript <<OSA
    set ASlist to the words of "${bashList[@]}"
OSA

运行以下任何示例后,结果以bash格式返回到stdout的样子:

Terminal, Utilities, Finder, Launchpad

这是我所期望的。等效的AppleScript输出如下所示:

{Terminal, Utilities, Finder, Launchpad}

表示已为ASlist分配了一个值列表,用花括号表示。但是,此列表无法很好地转换为bash输出,因此花括号丢失了,并且很难将列表与包含几个逗号的字符串区分开。