Andrew
Andrew

Reputation: 238777

How to run shell commands from a Mac/MacRuby application?

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).

Upvotes: 5

Views: 860

Answers (2)

jtomschroeder
jtomschroeder

Reputation: 1054

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.

Upvotes: 6

ghstcode
ghstcode

Reputation: 2912

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.

Upvotes: 1

Related Questions