Runtime.getRuntime().exec(commandStr)在Mac OS X 10.12上不工作(Sierra)

问题描述:

您好我正在尝试创建一个目录并使用创建的目录执行所选网络驱动器的挂载操作。该代码正在使用OS X Lion或Caption等其他OS X版本,但无法在OS X 10.12(Sierra) 上运行请建议此代码的工作方式。Runtime.getRuntime().exec(commandStr)在Mac OS X 10.12上不工作(Sierra)

proc=Runtime.getRuntime().exec(new String[]{"/bin/mkdir","/Volumes/Library"+count}); 
int exitCode = proc.waitFor(); 
System.out.println("Exit code : "+exitCode); 

,然后安装所述驱动

String[] commandArr = new String[]{"/sbin/mount","-t","smbfs","//username:[email protected]/library"," /Volumes/Library"+count}; 
proc = Runtime.getRuntime().exec(commandArr); 

此命令与终端运行,但使用调用Runtime.getRuntime不执行()。EXEC()。

请帮忙。

+0

检查启动java程序的用户是否具有执行命令的权限。 ? –

+0

我在终端上运行它显示操作不允许然后我尝试使用“sudo”这些命令,然后它在终端上运行,但不使用sudo以Java代码执行。 – user1796116

+0

另请参见[当Runtime.exec()不会](http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html)对于很多很好的有关正确创建和处理过程的提示。然后忽略它是指'exec'并使用'ProcessBuilder'来创建进程。 –

这里重要的是getRuntime().exec不会给你一个完整的shell。 你不能假定你可以对它做任何你可以从shell执行的任何操作(“命令行”)。

您可以尝试ProcessBuilder.start()(在Runtime.exec文档中推荐),但这可能也无济于事。

要做到这一点,你可以创建一个你想做的shell脚本,然后使用Runtime.exec或ProcessBuilder.start来执行脚本,并向其传递适当的参数。

+0

我试过这个使用shell脚本,但它没有运行,实际上我在Mac-OSX Sierra 10.12版本上发现,不管制造商和mount命令是否运行,无论我使用的是运行时。 exe()或ProcessBuilder。通过使用进程构建仅执行其他应用程序。 – user1796116