【问题标题】:How to send user input to terminal from java program (i.e by programmatically)?如何从java程序(即以编程方式)将用户输入发送到终端?
【发布时间】:2012-05-30 09:33:48
【问题描述】:

我正在执行来自 java 程序的命令,例如

Process myProcess = Runtime.getRuntime().exec("sudo cat /etc/sudoers"); //It asks for password so I send password through outputstream from my program.

InputStream inputStream = myProcess.getInputStream();
OutputStream outputStream = myProcess.getOutputStream();
outputStream.write("mypassword".getBytes()); // write password in stream
outputStream.flush();
outputStream.close();

但问题是,它再次向我询问密码,因为我已经通过程序的输出流发送了密码。 为了解决这个问题,我尝试了很多次,但实际上并没有完成。

通过使用 shell 脚本,我可以向终端提供密码,并且我的程序运行良好 但这不是最灵活的方式。

你能建议我通过我的 java 程序提供密码吗? (而不是 shell 编程)

【问题讨论】:

  • 这对于简单的任务来说太多了。只需在调用命令时将用户名/密码发送到命令即可。阅读这些命令以了解确切的语法
  • 您是否尝试在密码后发送\n 字符?您正在运行的外部应用程序可能需要它以 CR 和/或 LF 结束输入。
  • 可能是终端程序需要一定格式的输入。
  • 是的,我也尝试在密码后使用'\n'字符,但问题仍然存在
  • @Ruju 我正在尝试做类似的事情,你能提供你所说的 shell 脚本吗?

标签: java linux ubuntu terminal sudo


【解决方案1】:

您可以使用 sudo 的 -S 选项来完成:

String[] cmd = {"/bash/bin","-c","echo yourpassword| sudo -S your command"}; 
Runtime.getRuntime.exec(cmd); 

但我不确定它是否值得推荐。

我不是作者,我在那里找到了这个:http://www.coderanch.com/t/517209/java/java/provide-password-prompt-through-Java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2023-03-10
    • 1970-01-01
    • 2010-09-16
    • 2011-06-12
    • 2015-01-15
    • 2020-01-09
    相关资源
    最近更新 更多