![](/img/trans.png)
[英]Having permission denied exception when executing terminal command using Java Runtime.getRuntime().exec on Mac
[英]Java Runtime exec throws no such file or permission denied
我的程序在ubuntu 10.04上运行,这里是代码:
Process process=Runtime.getRuntime().exec("ls",null,null);
它抛出了一个例外:
Cannot run program "ls": java.io.IOException: error=2, No such file or directory,
我试图将“ls”改为“chmod”,“pwd”,我发现没有一个shell命令工作,都遇到了同样的问题。(我也试过“/ bin / sh -c ls”)
然后我将代码更改为:
Process process=Runtime.getRuntime().exec("/bin/ls",null,null);
它抛出了一个例外:
Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied
我已将所有相关文件和目录的权限更改为777,所以我真的不知道它有什么问题。
谢谢您的回复 。
Process process=Runtime.getRuntime().exec("ls",null,null);
由于ls
很可能不在您程序的当前工作目录中,因此预计会出现No such file or directory
异常。 当您从Linux shell提示符键入ls
,它使用PATH
环境变量将ls
转换为/bin/ls
。 Runtime
不会为您执行此操作。
您需要指定完整路径"/bin/ls"
。 正如@Ernest所提到的,您应该使用Runtime.exec("/bin/ls")
方法而不是传入null参数。
Process process=Runtime.getRuntime().exec("/bin/ls");
您的注释似乎表明即使您使用此调用,您也会收到Permission denied
异常。 这对我来说是标准的Java可执行文件。 我假设您可以成功地从Linux命令行执行/bin/ls
? /bin/ls
(和相关目录)应该是755而不是 777,这将是一场安全噩梦。 但是777应该可行。
也许你正在运行某种受保护的JDK? 例如,出于安全原因,Applet无权执行Unix命令。 也许你有一个限制性的Java策略文件 ,你需要添加execute
权限?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.