代码:
String line;
ProcessBuilder telnetProcessBuilder = new ProcessBuilder("/bin/bash");
telnetProcessBuilder.redirectErrorStream(true);
Process telnetProcess = telnetProcessBuilder.start();
BufferedReader input = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream()));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream()));
output.write("telnet <hostname> -l <username>\n");
output.flush();
output.write("<password>\n");
output.flush();
output.write("cd <path>\n");
output.flush();
output.write("<script-file1>\n");
output.flush();
output.write("<script-file2>\n");
output.flush();
output.write("\n");
output.flush();
while((line = input.readLine())!= null)
{
System.out.println(line);
if(line.indexOf("<some final text after <script-file2>>")>-1)
{
line = input.readLine();
System.out.println(line);
break;
}
}
output.close();
input.close();
//output.write("exit\n");
//output.flush();
//telnetProcess.destroy();
根据上面的代码,java启动一个linux进程/ bin / bash,然后telnet到远程系统,在那里它执行很少的应用程序脚本,然后它必须将输入,输出流和/ bin / bash进程控制留给用户并以0代码退出。
现在,在制作jar文件后,我将从linux命令(GNOME)终端调用它,然后进程应该保留自己的控制权。 IO在java代码(其执行)结束时流向用户,用户将输入一些命令,如系统状态和诊断,或者在输入特定字符时退出,这取决于应用程序,这是要求。
但是,问题是java退出最后一行后所以进程,即使我不退出或破坏进程。是的,这是一种自然行为,但如果有人已经面临这个问题,有人可以告诉我如何实现这一目标?好吧,我无法展示脚本文件的内容以及自公司拥有以来您可能需要的其他内容。
感谢您的回答
Ashutosh说
答案 0 :(得分:0)
我认为你的java应用程序在script-file2
的最后一行之后终止,实际上这是if
循环中的while
条件。
如果我理解正确,你希望你的java应用程序(1)打开到远程机器的telnet连接,(2)自动发出一些命令,然后(3)让用户手动发出其他命令,最后(4) )当用户给出退出命令时关闭telnet连接。我猜(1)和(2)已完成并在您的代码中工作。此时,我必须为您的应用程序构建一些用户界面,用户输入命令,然后将这些命令传递给您的telnet进程(就像您对初始命令所做的那样,使用output.write(userCommand); output.flush();
和继续执行此操作,直到用户输入的命令为exit
(或其他内容)。