Java 如何从Runtime.exec创建的cmd会话写入Unix终端?

Java 如何从Runtime.exec创建的cmd会话写入Unix终端?,java,terminal,Java,Terminal,我有一个java中的CmdProc对象,它使用Runtime.exec创建的会话并处理StdIn、StdOut和错误流。它在Linux、AIX和Windows上运行良好。我可以发送大多数操作系统命令并处理结果,包括响应它们的提示 但是,当我发送一个“su”命令时,它需要来自终端的输入,而不是来自StdIn,因此我对其“提示符”的响应被忽略 你知道我是如何写一些“似乎”来自终端的东西吗?再次感谢Nidhoegger。 答案似乎是使用send/expect。它确实意味着在box上进行特定的安装——我

我有一个java中的CmdProc对象,它使用Runtime.exec创建的会话并处理StdIn、StdOut和错误流。它在Linux、AIX和Windows上运行良好。我可以发送大多数操作系统命令并处理结果,包括响应它们的提示

但是,当我发送一个“su”命令时,它需要来自终端的输入,而不是来自StdIn,因此我对其“提示符”的响应被忽略

你知道我是如何写一些“似乎”来自终端的东西吗?

再次感谢Nidhoegger。 答案似乎是使用send/expect。它确实意味着在box上进行特定的安装——我希望避免这种情况——但我可以动态创建expect脚本,将其存储在/TMP中,然后执行它,并将解密后的密码作为参数传递。然后再次删除脚本。它正在工作,所以也许我可以抽出时间深入研究send/expect源代码(在Tcl中),看看是否有一些终端处理可以移植到java。
谢谢你的努力

将sudo与-S命令一起使用是一个选项吗?sudo-S将阅读stdin的PW,谢谢你的建议。不幸的是,这些是prod框,我用来运行java程序的用户id不允许sudo。如果可以的话,我就可以做sudo su-newuser了。此外,我希望将会话设置为新的USERID,而不是只运行单个命令,作为预编码“SUDO-S”的代码,每个命令在通用提交器的中间可能会有点复杂。但这绝对是一个有效的建议。谢谢。为您的应用程序设置+s位,让它自动获得超级用户权限怎么样?再次感谢您的努力。我不太确定。我以“java-jar JarFile”的形式运行应用程序。如果必须在java.exe上添加粘性部分,我想我们的Unix系统管理员不会喜欢这样吧?它能在jar文件上工作吗?您可以创建一个启动脚本,设置+x和+s,然后调用脚本而不是jave(脚本包含java-jar-JarFile)