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

发布于 2024-12-21 22:58:20 字数 200 浏览 0 评论 0原文

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

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

I am trying to write a little MacRuby status bar application that runs a command from the command line and displays the output. I don't know how to do this. How can I do this from my Mac application?

Update: The other thing that it might need to do is ask for an administrator password. Sometimes when I run this script from the command line, it asks for my password. I don't know how I would prompt the user for their password (or embed the shell so they could type it directly).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷︶言冷语的世界 2024-12-28 22:58:20

使用 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 框架,以及这个 链接。本质上,您需要

AuthorizationExecuteWithPrivileges(...)

使用配置好的 AuthorizationRef、要执行的工具的路径、标志、参数进行调用。 此处有一个有用的示例(在 ObjC 中) )展示了这是如何工作的。

Using Cocoa and MacRuby, utilize NSTask. Example that executes ls -la and prints output:

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

Unfortunately, including admin privileges is no trivial task, especially using MacRuby. Have a look at the SecurityFoundation framework, and this link. Essentially, you need to call

AuthorizationExecuteWithPrivileges(...)

with a configured AuthorizationRef, path of the tool to execute, flags, arguments. There is a useful example here (in ObjC) showing how this works.

计㈡愣 2024-12-28 22:58:20

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

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

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

You can simply use backticks:

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

If your command needs admin privileges to run, it won't run the command at all and won't return a response.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文