0

我需要将 Ruby 脚本从 Linux 机器发送到远程 Mac Mini 以打开和关闭应用程序。

我对 Ruby 不太熟悉,主要是 AppleScript。有没有办法将我的 AppleScript 嵌入到 Ruby 脚本中?或者有没有办法只使用Ruby?

这是我要发送的 AppleScript:

cat  osascript -e 'tell application "Finder" of machine "eppc://USERNAME:PASSWORD@IP" open file "Macintosh HD:Applications:Kodi" end tell'
4

2 回答 2

0

OP的问题措辞非常糟糕。从一点网络搜索:

Savant 是一个托管在 OS X 上的家庭自动化系统。不幸的是,该网站全是闪存,没有实质内容,所以我放弃了在那里寻找文档。

scli是一个基于命令行的远程管理程序,用于通过SNMP控制网络设备,例如路由器(以及可能是运行 Savant 服务器的无头 Mac Mini)。大概sclibridge是特定于供应商的实现;这不是一个常见的术语。

是否scli[bridge]用于直接控制 Savant 尚不清楚,但我猜可能不是:它似乎有点低级和通用,所以可能只是用于管理 Mac 本身。很可能它包括一个向远程机器发送 shell 命令的选项,避免了一直在之间跳转的需要sclissh但我没有费心去详细阅读。

我不知道 OP 是如何从那里开始想要运行 Ruby 脚本的,也不知道为什么他们的示例代码想要通过远程 Apple 事件与他们的 Mac 对话,而这在 Linux 上是不可用的。我怀疑这主要是由于糟糕的供应商文档造成的混乱。

无论如何,假设他们可以使用sclissh运行远程 *nix 命令,最简单的事情是向 Mac 添加一堆可执行的 AppleScript,然后 Linux 机器可以像任何其他 shell 命令一样远程执行。例如,将以下内容另存为名为 的纯文本(未编译的 AppleScript)文件kodi-remote

#!/usr/bin/osascript

on run argv 
    -- argv : list of string -- any arguments to `kodi-remote` command

    if argv is {} or item 1 of argv is "help" then
        log "Usage: kodi-remote [ run | quit | help ]"
        return
    end if

    set cmd to item 1 of argv
    if cmd is "run" then
        tell application "Kodi" to run
    else if cmd is "quit" then
        tell application "Kodi" to quit
    else
        error "Unknown command: " & cmd number 1
    end if
end run

用于chmod +x kodi-remote使其可执行并将其放在远程shell 可以找到它的位置(例如/usr/local/bin)。

您可以通过在 Terminal.app 中打开一个新窗口并运行来在本地对其进行测试:

kodi-remote run
kodi-remote quit

然后,相同的命令应该可以在您用于在 Linux 机器上运行远程 shell 命令的任何地方工作。

于 2015-04-16T10:46:49.393 回答
0

我在“从 Ruby 调用 Applescript ”中找到了下面的脚本。

def osascript(script)
  system 'osascript', *script.split(/\n/).map { |line| ['-e', line] }.flatten
end
于 2015-04-15T20:18:06.140 回答