आप Terminal.app पर एक "क्या स्क्रिप्ट" घटना भेजने के लिए (अब अप्रचलित) AppleEvent कार्बन एपीआई का उपयोग कर सकते हैं:
OSStatus doTerminalScript (NSString* script) {
AppleEvent evt;
OSStatus err;
// Build event
err = AEBuildAppleEvent(kAECoreSuite, kAEDoScript,
typeApplicationBundleID, "com.apple.terminal", 18L,
kAutoGenerateReturnID, kAnyTransactionID, &evt, NULL,
"'----':utf8(@)", strlen([script UTF8String]), [script UTF8String]);
if (err) return err;
AppleEvent res;
// Send event
err = AESendMessage(&evt, &res, kAEWaitReply, kAEDefaultTimeout);
AEDisposeDesc(&evt);
if (err) return err;
// Check for any errors from Terminal.app
AEDesc desc;
err = AEGetParamDesc(&res, keyErrorNumber, typeSInt32, &desc);
AEDisposeDesc(&res);
if (!err) {
AEGetDescData(&desc, &err, sizeof(err));
AEDisposeDesc(&desc);
} else if (err == errAEDescNotFound)
err = noErr;
return err;
}
लिया प्रपत्र here। ध्यान दें कि टर्मिनल.एप को -[NSWorkspace launchApplication:]
के साथ लॉन्च नहीं किया जाना चाहिए यदि नहीं चल रहा है। तो चाहता था, यह - [NSApplication activateWithOptions:]
एक टिप्पणी द्वारा सुझाव दिया गया है साथ अग्रभूमि में रखा जा सकता है, यह आसानी से और अधिक आधुनिक Scripting Bridge API वापस पोर्ट जा सकता है।
स्रोत
2015-08-19 22:47:34
सही, धन्यवाद! –
हालांकि शायद इस उपयोग के लिए ओवरकिल, स्क्रिप्टिंग ब्रिज (http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/Introduction/Introduction.html) बाहरी ऐप्स के साथ संचार करने के लिए एक अच्छा समाधान है उद्देश्य-सी ऐप्स के भीतर से ऐप्पलस्क्रिप्ट। –
उन में उद्धरण चिह्न या रिक्त स्थान के साथ फ़ोल्डर से सावधान रहें, हालांकि – cobbal