10

Cocoa プロジェクトで次のコードを使用して、作成したスクリプトを呼び出しています。スクリプトはプロジェクトと同じフォルダーにあり、Xcode の "Resources" フォルダーの下にも表示されます。適切なパスが見つかりましたが、パスにアクセスできないと表示されます。助けてください。

NSBundle *mainBundle=[NSBundle mainBundle];
NSString *path=[mainBundle pathForResource:@"script" ofType:@"sh"];

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: path];

NSLog (path);

NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
[task setStandardError: pipe];

NSFileHandle *file = [pipe fileHandleForReading];

[task launch];
[task waitUntilExit];

NSData *data = [ddFile readDataToEndOfFile];

NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
HDSpeed = [f output];

[f release];    
[task release];

デバッガーで得られる出力は次のとおりです。

2010-07-10 17:53:26.384 tester[5023:a0f] /Users/guest/Library/Developer/Xcode/DerivedData/tester-bhukztmqjwoqrwereagsshvtbfqx/Build/Products/Debug/tester.app/Contents/Resources/script.sh

2010-07-10 17:53:26.386 tester[5023:a0f] launch path not accessible

4

5 に答える 5

5

の前に次の行を追加します[task launch]

[task setLaunchPath:@"/bin/sh"];
于 2011-07-08T03:06:30.123 に答える
4

シェル バイナリを取得し、スクリプトを引数として渡す必要があります。そのため、シェル スクリプトが bash を対象として記述されている場合は、bash インタープリターを取得し、1 つの引数 (script.sh へのパス) を含む引数リストを渡します。

于 2010-07-11T00:57:31.007 に答える
2

このエラーは、スクリプト自体が実行可能としてマークされていない場合に発生します。ターミナル ウィンドウを開き、プロジェクト ディレクトリ内のスクリプトがある場所に移動して、次のように入力します。

chmod +x script.sh

クリーンアップしてビルドすると、スクリプトを直接使用できます。これは、スクリプトに引数を渡すこともできることを意味します。

于 2016-07-20T08:23:22.963 に答える
-4

[タスクwaitUntilExit]のため;

于 2011-01-27T20:55:02.000 に答える