permission - Permiso denegado error en Java para comando chmod
comando scp permission denied (5)
Actualmente estoy trabajando en un proyecto que también hace uso de FFMpeg en OSX. Guardo FFMpeg en el JAR y lo extraigo y configuro el ejecutable en uso como parece que está haciendo. Esto es lo que hago, y parece funcionar.
public static void setExecutable(File file, boolean executable) { Process p = Runtime.getRuntime().exec(new String[] { "chmod", "u"+(executable?''+'':''-'')+"x", file.getAbsolutePath(), }); // do stuff to make sure p finishes & capture output }
El código es GPL, así que siéntase libre de verificarlo. No es la mejor base de código, e incluso el material de FFMpeg es quizás demasiado complejo, pero funciona.
La fuente se puede ver en http://korsakow.net
Estos dos archivos en particular pueden ser interesantes para ti
Tengo un archivo ejecutable (ffmpeg) que intento ejecutar con un programa Java en una Mac. Usé el programa Java para enviar el comando chmod 777 /path/to/ffmpeg
, pero cuando intento ejecutar ffmpeg, aparece el siguiente error:
java.io.IOException: Cannot run program "/Users/james/WalkTheHall/ffmpeg": error=13, Permission denied
Pero cuando ejecuto chmod 777 /path/to/ffmpeg
desde Terminal antes de abrir la aplicación Java, el comando ffmpeg se ejecutará perfectamente en el programa Java.
¿Hay alguna diferencia entre llamar a chmod
desde dentro del programa Java y llamarlo por mi cuenta? ¿Por qué no va a funcionar? ¡Gracias!
Sí, hay una diferencia. Cuando ejecuta el comando desde la terminal, es usted quien realiza la acción y, por lo tanto, se realiza utilizando sus credenciales. La aplicación Java ejecuta el comando usando los permisos de la aplicación Java. Esto es para evitar que una aplicación se ejecute y luego realice cambios peligrosos y no deseados en el sistema de archivos. Quizás alguien más pueda elaborar y guiar una solución alternativa para esto.
Solo tuve el mismo problema en mi código. Lo resolví agregando waitFor after exec. El proceso "chmod" no termina cuando se ejecuta el siguiente comando. el código puede verse así:
p = Runtime.getRuntime.exec("chmod 777 xxx");
p.waitFor();
Runtime.getRuntime.exec("./xxx");
Prueba esto:
commandFile.setExecutable(true);
Process p = Runtime.getRuntime.exec(commandFile.getAbsoluteFile());
Supongo que chmod
es un comando de shell, no un ejecutable. Intenta ejecutar chmod
través de tu caparazón. Vea más detalles aquí: Quiere invocar un comando linux shell de Java