我跟着一个非常有帮助的guide来创建一个简单的菜单栏应用程序,它有两个动作。但是,我希望在选择其中一个操作时执行2个shell命令。
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
答案 0 :(得分:0)
以下两个类应该相关:Process
和NSUserUnixTask
。
<强>过程强>
表示当前进程的子进程的对象。
使用Process类,您的程序可以运行另一个程序 一个子进程,可以监视该程序的执行情况。一个过程 object创建一个单独的可执行实体;它与Thread的不同之处在于 它不会与创建的进程共享内存空间 它子>
这将是您用于chmod
脚本的例子。
↳Foundation | Streams, Sockets, and Ports | Process
<强> NSUserUnixTask 强>
执行unix应用程序的对象。
NSUserUnixTask类用于运行unix应用程序,通常是 shell脚本,来自您的应用程序。它旨在执行 用户提供的脚本,并将在。之外执行它们 应用程序的沙箱,如果有的话。
这可用于执行shell
脚本。