私は作成しているアプリケーションを持っていて、その中からシェルスクリプトを実行したいと思っています。スクリプトの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. Cocoaアプリケーションからデーモンを起動する
- 4. cocoaドキュメントベースのアプリケーション
- 5. スクリプティングのCocoaアプリケーション
- 6. Cocoaアプリケーションのカスタムレコードビュー
- 7. CocoaアプリケーションのIPアドレス
- 8. Pythonからシェルスクリプト?
- 9. ObjectiveCのAMF0パーサー
- 10. NumberFormatter - ObjectiveC
- 11. GCDを使用したCocoaアプリケーションからのPythonスクリプトの実行
- 12. ユニットテスト用リソースCocoaアプリケーション
- 13. Cocoaアプリケーションからプログラムでメニュー項目にアクセスできますか?
- 14. Cocoaアプリケーションからfirefoxプラグインを作成しますか?
- 15. Cocoaアプリケーションのブーストライブラリへのリンク
- 16. Cocoaアプリケーションの書式ボタンテキスト
- 17. ObjectiveC blocks Java equivalent
- 18. CocoaアプリケーションからApplescriptをパラメータで実行する
- 19. Cocoaアプリケーションから「プリントユーティリティ」を作成するには?
- 20. CocoaアプリケーションからMySqlデータベースを取得する - PHPブリッジ
- 21. twitter&FacebookでCocoa Macアプリケーションからアップデートするには
- 22. Javaアプリケーションからシェルスクリプトを独立して実行する
- 23. Groovy/Grailsアプリケーションからシェルスクリプトを呼び出す
- 24. 別のシェルスクリプト内からのシェルスクリプトの呼び出しの相違
- 25. Cocoaフレームワークの作成と別のCocoaプロジェクトからの使用
- 26. Cocoaアプリケーションでリソースを暗号化しますか?
- 27. ObjectiveCのNSStringから改行を分割する方法
- 28. CocoaアプリケーションをUnquittableにする
- 29. 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