我有一个java程序,比如说Test.class。
当我执行 java Test 程序要求输入密码然后继续。
问题是标准输出被重定向到日志并且程序使用 & 启动(我们在 UNIX 上)。
我如何与这个程序启动 java Test & 与标准输入和标准输出进行交互?
一种可能的解决方案是在前台启动程序,然后在某个条件下从 java.util.Run 后台运行它。
谢谢!
如果程序可以从标准输入读取密码,您可以让 Unix 脚本提示输入密码,然后启动 Java 应用程序并将密码传递给它,例如:
echo $PASSWORD | java Test >log.out &
或者您可以考虑将您的 Java 应用程序分成两部分;可能有一个验证密码的交互式“前端”部分,然后一旦验证密码,这可能会启动一个“后端”部分作为后台进程并退出。
一种选择是使用echo
s 将输入通过管道传输到您的程序:
(echo input1
echo input2
....
) | java Test >& logfile &
或者,如果输入的数量很大,您也可以将输入放在文件中并将文件内容重定向为:
< input_file java Test >& logfile &
我在这个问题中没有看到任何特定于 Java 的内容,如果您想根据应用程序输出驱动标准输入,您可以使用 Expect 实用程序:http ://en.wikipedia.org/wiki/Expect
但请注意,Expect 是出了名的脆弱,您最好避免在生产场景中使用它。
实际上,如果您只想输入密码,也许您可以尝试在前台启动您的应用程序(不带尾随 &)。
然后,在您输入密码后,按 Ctrl+Z 或在另一个 shell 中执行kill -SIGSTP <pid>
以暂停您的程序。最后,键入bg
以将其置于背景中。
有关详细信息,请阅读有关 shell 的作业控制功能的文档。