1

catコマンドを使用してファイルを連結してみます。ターミナルでこれを使用すると、すべてが正常に機能します:

cat /Users/Home/Desktop/test.mp3* > test.mp3

NSTaskを使用してこれを再現しようとすると、以下のエラーが発生します。

コード:

NSArray *Args = [NSArray arrayWithObjects:[NSString stringWithFormat:@"%@*",[TAFileName stringByDeletingPathExtension]],@">",[TAFileName stringByDeletingPathExtension],nil];
NSLog(@"%@",Args);
NSString *LaunchPath = [[NSBundle mainBundle] pathForResource:@"cat" ofType:@""];
[self startTaskWithLaunchPath:LaunchPath andArguments:Args showingProcess:NO];

NSLog出力:

(
"/Users/Home/Desktop/test.mp3*",
">",
"/Users/Home/Desktop/test.mp3"
)

エラー :

cat: /Users/Home/Desktop/test.mp3*: No such file or directory
cat: >: No such file or directory
cat: /Users/Home/Desktop/test.mp3: No such file or directory

「startTaskWithLaunchPath:andArguments:showingProcess:」は、他の多くのターミナルコマンドで正常に機能しますが、問題ではないと100%確信しています。

4

2 に答える 2

1

問題は、入力リダイレクトとグロブです。これは、catコマンドではなく、シェル(通常は#!/ bin / bash)によって処理されます。したがって、「test.mp3 *」を実際のMP3名に展開し、それを別の場所にリダイレクトする引数を使用してタスクを開始することは、タスクで実行できることではありません。

シェルスクリプトを直接呼び出すことができるかどうか、おそらくアプリで動的に作成できるかどうかを確認してから、bashアプリケーションの引数として呼び出すことをお勧めします。次に、必要なことを実行する必要があります。

于 2010-12-23T20:27:21.373 に答える
0

「/bin/sh」を使用して問題を解決することができました。これにより、コマンドがシェルに解析され、そのように実行されます。この方法を使用しても「そのようなファイルはありません」と出力されましたが、タスクの初期作業ディレクトリを変更することで解決しました。

タスクを起動するためのコード:

NSArray *Args = [NSArray arrayWithObjects:@"-c",[NSString stringWithFormat:@"cat %@.* >> %@",[[TAFileName lastPathComponent] stringByDeletingPathExtension],[[TAFileName lastPathComponent] stringByDeletingPathExtension]],nil];
NSString *LaunchPath = @"/bin/sh";
[self startTaskWithLaunchPath:LaunchPath andArguments:Args showingProcess:NO];

ディレクトリを変更するコード:

[TATask setCurrentDirectoryPath:[NSString stringWithFormat:@"%@/",[TAFileName stringByDeletingLastPathComponent]]];

それはすべてを解決しました。マイケル、助けてくれてありがとう。

于 2010-12-28T14:42:26.440 に答える