私は作成しているアプリケーションを持っていて、その中からシェルスクリプトを実行したいと思っています。スクリプトの1つは.plistファイルを作成し、もう1つはバイナリファイルにパッチを適用します。シェルスクリプトでこれをやりたいのは、私が必要とする2つのもののために動作することが分かっているからです。 Objective-C/Cocoaでどうやってやっているのかは分かりませんが、これを達成するための推奨事項は非常に高く評価されます。アプリケーションからのCocoa Objective-Cシェルスクリプト?
答えて
NSTask
を使用する必要があります。 NSTask
は、ターミナルコマンドを実行するためのシステムです。コマンド/path/to/script/sh yourScript.sh
を実行します
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/path/to/script/sh"];
[task setArguments:[NSArray arrayWithObjects:@"yourScript.sh", nil]];
[task setStandardOutput:[NSPipe pipe]];
[task setStandardInput:[NSPipe pipe]];
[task launch];
[task release];
:ここでは、シェルスクリプトを実行するためにそれを使用することができます方法です。スクリプトに引数が必要な場合は、それらを引数の配列に追加できます。標準出力はすべての出力をパイプオブジェクトにリダイレクトします。パイプオブジェクトは、ファイルに出力したい場合にフックできます。入力に別のNSPipe
を使用する必要があるのは、スクリプトにロギングする代わりにNSLog
を正しく動作させるためです。
NSTask
の仕組みの詳細については、this answerを参照してください。
すばらしい例をありがとう。スクリプトをバイナリにコンパイルする方法はありますか? –
@Buxme:シェルスクリプトをプロジェクトに追加し、 '[[NSBundle mainBundle] pathForResource:@" scriptName "ofType:@" sh "]'でパスを取得することができます。その後、最初の引数にそのパスを使用すれば、うまく動作するはずです。 –
ありがとう! –
私が知っている最も簡単な方法はNSTaskです。 これは、bashスクリプトを呼び出せる端末コマンドのようなものです。
ターミナルコマンドよりも優れています。なぜなら、配列の引数を渡してプログラムがタスクを直接実行するからです。シェルが関与していない場合、シェルのエスケープについて心配する必要はありません。 –
Cool。あなたは偶然の例を持っていますか?また、私のアプリケーションがシェルスクリプトを呼んでいることが明らかでないか、これは本当はシェルスクリプトではないのでしょうか? BTW - 私はバイナリにスクリプトをコンパイルしたいと思う。 –
@Buxme:「明白」とはどういう意味ですか?ユーザーは、アクティビティモニターを表示しない限り、別のプロセスを実行していると判断できません。 –
- 1. DarwinとObjectiveC - Cocoaアプリケーションからシェルスクリプトを呼び出す方法は?
- 2. CocoaアプリケーションからSQLデータベースへのアクセス
- 3. objectiveCとswiftライブラリの使用方法Cocoa Pods
- 4. Cocoaアプリケーションからデーモンを起動する
- 5. cocoaドキュメントベースのアプリケーション
- 6. スクリプティングのCocoaアプリケーション
- 7. Cocoaアプリケーションのカスタムレコードビュー
- 8. xibファイルからObjectiveCのviewcontrollerに移動
- 9. CocoaアプリケーションのIPアドレス
- 10. Mac OS:別のCocoaアプリケーション内からCocoaアプリケーションを実行するにはどうすればよいですか?
- 11. ObjectiveCとMacOS用のCocoaで、半円で泡を描くにはどうしたらいいですか?
- 12. ユニットテスト用リソースCocoaアプリケーション
- 13. SwiftPMからCocoaアプリケーション(XCODE)へのフレームワークの埋め込み
- 14. GCDを使用したCocoaアプリケーションからのPythonスクリプトの実行
- 15. Cocoaアプリケーションのブーストライブラリへのリンク
- 16. Cocoaアプリケーションからfirefoxプラグインを作成しますか?
- 17. Cocoaアプリケーションからプログラムでメニュー項目にアクセスできますか?
- 18. GUIなしのCocoaアプリケーション?
- 19. Cocoaアプリケーションの書式ボタンテキスト
- 20. ObjectiveCのAMF0パーサー
- 21. NumberFormatter - ObjectiveC
- 22. Cocoaアプリケーションから「プリントユーティリティ」を作成するには?
- 23. CocoaアプリケーションからMySqlデータベースを取得する - PHPブリッジ
- 24. CocoaアプリケーションからApplescriptをパラメータで実行する
- 25. twitter&FacebookでCocoa Macアプリケーションからアップデートするには
- 26. Pythonからシェルスクリプト?
- 27. Cocoaアプリケーション:プログラムでスクロールしますか?
- 28. Cocoaアプリケーションでリソースを暗号化しますか?
- 29. Cocoaフレームワークの作成と別のCocoaプロジェクトからの使用
- 30. Cocoaステータスバー(UIElement)アプリケーション設定ウィンドウ
あなたはMacOSか? iOSでは、obj-c(書き込み可能なディレクトリのみ)からバイナリを簡単に作成することができます。 –
申し訳ありませんが、OS X用です。 –
[Cocoaアプリから端末コマンドを実行]の複製が可能です。(http://stackoverflow.com/questions/412562/execute-a-terminal-command-from- a-cocoa-app) – Mark