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).
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With