18

This is probably a stupid question, but how can I execute a shell command from my Cocoa app?

I have the command as a string "command", but can easily manipulate data as needed.

There is no need to get a returned output value.

2

3 Answers 3

30

NSTask is pretty easy to do this with. For a synchronous call, you can use something like this fragment:

NSString *path = @"/path/to/executable";
NSArray *args = [NSArray arrayWithObjects:..., nil];
[[NSTask launchedTaskWithLaunchPath:path arguments:args] waitUntilExit];

The -waitUntilExit call makes sure it finishes before proceeding. If the task can be asynchronous, you can remove that call and just let the NSTask do it's thing.

Sign up to request clarification or add additional context in comments.

Comments

9

If you just want to run something and don't care about the output or return code (for example, you want to touch a file), you can just do

system("touch myfile.txt");

Easy as that.

1 Comment

Be very, very careful with system and popen. It's easy to introduce a vulnerability by letting characters through to the shell that it will consider special. NSTask and fork/exec are much safer.
3

NSTask

Using the NSTask class, your program can run another program as a subprocess and can monitor that program’s execution.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.