java - 通过 Java App 调用终端并运行命令

标签 java linux shell process terminal

我正在使用以下代码从我的 Java 应用程序运行命令:

String cmd[] = {"sh","-c", "sudo chmod 777 -R " + path};
Terminal.runCommand(cmd);

我想通过单击并选择“打开方式...”->“Java”来执行 .jar;

问题是由于“sudo”命令,应用程序一直在等待输入密码,但没有调用终端,用户无法输入密码..

那么,我怎样才能调用上面的命令和终端来让用户有机会输入密码并且应用程序最终继续运行呢?

非常感谢!

最佳答案

这是一个 sudo 问题,不是 Java 问题; sudo 以 root 身份执行操作。您的进程没有 root 权限,因此 sudo 需要对人进行身份验证。这是一个特性,而不是一个错误。系统不允许您运行 root 命令。

一个选项可能是使用 gksu 代替,它在某些发行版中默认提供。它的工作原理类似,但会在 GUI 中而不是在(在本例中不存在的)终端上弹出密码对话框。

另一种可能是简单地以 root 身份运行您的 Java 进程,这可能会带来所有安全隐患。在某些情况下,这可能是一个有效的选择,但要小心。

或者您可以查看 sudo 和 sudoers 的手册页——可以将帐户配置为不需要密码,并在需要时将它们限制为特定命令。

关于java - 通过 Java App 调用终端并运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14264516/

相关文章:

java - 如何从Oracle返回列号到Java

java - 在java中,有没有一种方法可以检查对象如何从垃圾收集根仍然可达?

linux - 使用 dbus-send 为自定义方法寻址 127.0.0.1

bash - "sudo su && somecommand"不运行某些命令

linux - 在终端中显示分支的问题

linux - 如何根据当前目录在 Konsole 中以编程方式更改颜色?

java - 如果我只以线程 id 为键调用 get、put、remove 并且从不迭代映射,我是否需要 ConcurrentHashMap?

java - 为什么下面的代码不起作用?

c++ - C++中的Web服务器,如何发送图像

linux - 如何在Linux上将标签正确添加到AWS EBS卷设备的文件系统中?