Domanda

provo concatenare file utilizzando il comando cat. Quando uso questo nel terminale, tutto funziona bene:

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

me cercando di riprodurre questo utilizzando un NSTask, dà l'errore di seguito:

Codice:

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];

uscita NSLog:

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

Errore:

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

Il "startTaskWithLaunchPath: andArguments: showingProcess:" funziona bene con un sacco di altri comandi da terminale, sono sicuro al 100% che non è il problema

.
È stato utile?

Soluzione

Il problema è redirezione dell'input e globbing, che viene gestito dalla shell (in genere #! / Bin / bash) e non dal comando cat. Quindi, a partire un'attività con un argomento di espandere "test.mp3 *" in un nome di MP3 reale e quindi reindirizzare in una posizione diversa, non è qualcosa che un compito può fare.

mi sento di raccomandare di vedere se si può chiamare uno script della shell direttamente, forse anche in modo dinamico creare nella vostra app - e quindi chiamare come argomento per l'applicazione bash. Poi si dovrebbe fare ciò che è necessario.

Altri suggerimenti

Sono riuscito a risolvere il problema utilizzando "/ bin / sh". Questo analizza un comando in una conchiglia e corre in quel modo. Utilizzando questo metodo ancora emesso "No such file", ma ho risolto che modificando la directory di lavoro iniziale compito.

Codice per lanciare l'operazione:

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];

Il codice per modificare la directory:

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

che ha risolto tutto. Grazie, Michael, per il vostro aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top