Pregunta

Soy un objetivo-c newbe y me pregunto cómo ejecutar un script de shell de la manera más fácil posible de objectivo-c. No me importa nada de la salida. He intentado system (), exec () y execl () y un NSTask. Esos métodos no funcionan por alguna razón ... Este es el script de shell que estoy tratando de ejecutar:

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

(Básicamente montando mi iDisk). Además, no se muestran cuadros de contraseña ni ninguna indicación de que funcione. Funcionará en AppleScript, y he creado el directorio de punto de montaje. Ninguno de los métodos anteriores hace nada, o bloquea la aplicación por alguna extraña razón.

¿Fue útil?

Solución

NSTask le proporciona todo lo que necesita. Esto debería 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];

Pruebe primero toda la ruta de comando y los argumentos de la línea de comando. No he usado mount_webdav, pero creo que requiere más argumentos de los que proporcionó.

Otros consejos

No use scripts de shell cuando pueda ayudarlo. Son una buena forma de introducir errores graves cuando parametriza el script (por ejemplo, mount_webdav% @% @ ).

En su lugar, use NSTask, fork / exec directamente o (en Python) el módulo de subproceso. Pasará los tres argumentos como una matriz, en lugar de como una sola cadena.

NSTask sería la forma de hacer esto en Cocoa. Es posible que desee revisar su código nuevamente, leer la documentación (también vea el código de muestra allí) y publicar preguntas específicas sobre su uso aquí si tiene problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top