Pergunta

Eu sou um objetivo-c newbe e estou querendo saber como executar um script shell em Objective-C maneira mais fácil possível. Eu não me importo com qualquer um dos saída. Tenho system (), exec () e execl () e um NSTask tentou. Esses métodos não funcionam por algum motivo ... Este é o shell script que eu estou tentando executar:

"mount_webdav http://idisk.mac.com/idisk_username/ /Volumes/idisk_username"

(Basicamente montagem meu iDisk). Além disso, nenhuma senha caixas ou qualquer indicação de mostra de trabalho. Ele vai trabalhar em AppleScript, e eu ter criado o diretório de ponto de montagem. Nenhum dos métodos acima fazer qualquer coisa em tudo, ou travar o aplicativo por algum motivo estranho.

Foi útil?

Solução

NSTask fornece tudo que você precisa. Isso deve funcionar:

NSArray *args=[NSArray arrayWithObjects:@"http://idisk.mac.com/idisk_username/",@"/Volumes/idisk_username",nil];
NSTask *mountTask=[[NSTask alloc] init];
[mountTask setLaunchPath:@"/sbin/mount_webdav"];
[mountTask launch];

Test todo o caminho completo de comando e argumentos da linha de comando em primeiro lugar. Eu não usei mount_webdav mas acho que ele requer mais argumentos do que você fornecidos.

Outras dicas

Não use scripts shell quando você pode ajudá-lo. Eles são uma boa maneira de introduzir erros graves quando você parametrizar o script (por exemplo, mount_webdav %@ %@).

Em vez disso, o uso quer NSTask, fork / exec directamente, ou (em Python) o módulo subprocesso. Você vai passar os três argumentos como uma matriz, em vez de uma única cadeia.

NSTask seria a maneira de fazer isso em Cocoa. Você pode querer passar por cima de seu código de novo, leia-se sobre a documentação por ela (também olhar para o código de exemplo lá), e postar perguntas específicas sobre o seu uso aqui se você tiver problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top