如何从Mac/MacRuby应用程序运行shell命令?

And*_*rew 5 macos shell command-line macruby

我正在尝试编写一个小的MacRuby状态栏应用程序,它从命令行运行命令并显示输出.我不知道该怎么做.如何从我的Mac应用程序执行此操作?

更新:它可能需要做的另一件事是要求输入管理员密码.有时,当我从命令行运行此脚本时,它会询问我的密码.我不知道如何提示用户输入密码(或嵌入shell以便他们直接输入密码).

jto*_*der 6

使用Cocoa和MacRuby,使用NSTask.执行ls -la并打印输出的示例:

framework 'Cocoa'

task = NSTask.alloc.init
task.setLaunchPath("/bin/ls")

arguments = NSArray.arrayWithObjects("-l", "-a", nil)
task.setArguments(arguments)

pipe = NSPipe.pipe
task.setStandardOutput(pipe)

file = pipe.fileHandleForReading

task.launch

data = file.readDataToEndOfFile

string = NSString.alloc.initWithData(data, encoding: NSUTF8StringEncoding)
puts "Command returned: "
puts string
Run Code Online (Sandbox Code Playgroud)

不幸的是,包括管理员权限在内并不是一项简单的任务,尤其是使用MacRuby.看一下SecurityFoundation框架,以及这个链接.基本上,你需要打电话

AuthorizationExecuteWithPrivileges(...)
Run Code Online (Sandbox Code Playgroud)

使用已配置的AuthorizationRef,要执行的工具的路径,标志,参数.有一个有用的例子,在这里展示它是如何工作(在ObjC).