【问题标题】:Run shell commands from a menu bar item从菜单栏项运行 shell 命令
【发布时间】:2018-09-15 20:58:22
【问题描述】:

我遵循了一个非常有帮助的guide 创建了一个简单的菜单栏应用程序,它有两个操作。 However, I would like 2 shell commands to be carried out when one of these actions is selected.

Xcode中的当前函数是:

func constructMenu() {
let menu = NSMenu()

menu.addItem(NSMenuItem(title: "ON", action: #selector(AppDelegate.printQuote(_:)), keyEquivalent: "S"))
menu.addItem(NSMenuItem(title: "OFF", action: #selector(AppDelegate.printQuote(_:)), keyEquivalent: "R"))
menu.addItem(NSMenuItem.separator())
menu.addItem(NSMenuItem(title: "Quit SMAC", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))

statusItem.menu = menu

当我点击菜单栏时,这显示了三个选项:

Screenshot of the menu bar options

但是,这就是我的 Cocoa 知识不足的地方。我希望在单击 ON 操作时执行以下 shell 脚本:

chmod u+x ~/Desktop/Mask.sh
~/Desktop/Mask.sh

最后在按下OFF按钮时执行以下两个bash脚本:

chmod u+x ~/Desktop/Unmask.sh
~/Desktop/Unmask.sh

【问题讨论】:

标签: swift macos shell


【解决方案1】:

以下两个类应该是相关的:ProcessNSUserUnixTask

Process
代表当前进程的子进程的对象。
使用 Process 类,您的程序可以运行另一个程序 一个子进程,并且可以监视该程序的执行。一个过程 对象创建一个单独的可执行实体;它与线程不同 它不与创建的进程共享内存空间 它。

例如,这将是您用于chmod 脚​​本的内容。

Foundation | Streams, Sockets, and Ports | Process

NSUserUnixTask
一个执行 unix 应用程序的对象。
NSUserUnixTask 类旨在运行 unix 应用程序,通常是一个 shell 脚本,来自您的应用程序。它旨在执行 用户提供的脚本,并将在 应用程序的沙箱,如果有的话。

这可以用来执行您的shell 脚本。

Foundation | Processes and Threads | NSUserUnixTask

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2011-03-03
    • 2011-06-04
    • 2015-07-17
    • 2018-07-30
    • 2011-01-28
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多