maneira mais fácil de shell script run Objective-C
-
10-07-2019 - |
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.
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.