La forma más fácil de ejecutar shell script Objective-C
-
10-07-2019 - |
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.
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.