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

时间:2011-12-19 16:22:48

标签: macos shell command-line macruby

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

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

2 个答案:

答案 0 :(得分: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

不幸的是,包含管理员权限并非易事,尤其是使用MacRuby。看一下SecurityFoundation框架,以及这个link。基本上,你需要打电话

AuthorizationExecuteWithPrivileges(...)

使用已配置的AuthorizationRef,要执行的工具的路径,标志,参数。有一个有用的例子here(在ObjC中)显示了它是如何工作的。

答案 1 :(得分:1)

你可以简单地使用反引号:

output = `cd ~ && ls`
puts output # or assign to a label, textbox etc.

如果您的命令需要管理员权限才能运行,它根本不会运行命令,也不会返回响应。