将输入键从 Java 传递到 Shell 脚本
pass enter key from Java to Shell script
我正在尝试 Java 程序在 unix 环境中 运行 多个命令。我需要在每个命令后传递 'ENTER'。有什么方法可以在 InputStream 中传递输入。
JSch jsch=new JSch();
Session session=jsch.getSession("MYUSERNAME", "SERVER", 22);
session.setPassword("MYPASSWORD");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel= session.openChannel("shell");
channel.setInputStream(getInputStream("ls -l"));
channel.setInputStream(getInputStream("\r\n"));
channel.setInputStream(getInputStream("pwd"));
channel.setInputStream(getInputStream("\r\n"));
channel.connect();
当我执行ls -l时,我想在这里添加回车,以便执行命令。
getInputStream是将String转换为InputStream的方法。
如有任何帮助,我们将不胜感激。
根据 JSch javadoc,您必须在 connect()
之前调用 setInputStream()
或 getOutputStream()
。您只能执行其中一项,一次。
就您的目的而言,getOutputStream()
似乎更合适。有了 OutputStream 后,您可以将其包装在 PrintWriter 中,以便更轻松地发送命令。
同样,您可以使用 channel.getInputStream()
获取一个 InputStream,您可以从中读取结果。
OutputStream os = channel.getOutputStream();
PrintWriter writer = new PrintWriter(os);
InputStream is = channel.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
channel.connect();
writer.println("ls -l");
String response = reader.readLine();
while(response != null) {
// do something with response
response = reader.readLine();
}
writer.println("pwd");
如果您决定使用 setInputStream()
而不是 getOutputStream()
那么您只能这样做一次,因此您必须将所有行放入一个字符串中:
channel.setInputStream(getInputStream("ls -l\npwd\n"));
(我认为您不需要 \r
,但如果需要请重新添加)
如果您不熟悉使用流、写入器和读取器,请在使用 JSch 之前对这些进行一些研究。
我正在尝试 Java 程序在 unix 环境中 运行 多个命令。我需要在每个命令后传递 'ENTER'。有什么方法可以在 InputStream 中传递输入。
JSch jsch=new JSch();
Session session=jsch.getSession("MYUSERNAME", "SERVER", 22);
session.setPassword("MYPASSWORD");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel= session.openChannel("shell");
channel.setInputStream(getInputStream("ls -l"));
channel.setInputStream(getInputStream("\r\n"));
channel.setInputStream(getInputStream("pwd"));
channel.setInputStream(getInputStream("\r\n"));
channel.connect();
当我执行ls -l时,我想在这里添加回车,以便执行命令。 getInputStream是将String转换为InputStream的方法。
如有任何帮助,我们将不胜感激。
根据 JSch javadoc,您必须在 connect()
之前调用 setInputStream()
或 getOutputStream()
。您只能执行其中一项,一次。
就您的目的而言,getOutputStream()
似乎更合适。有了 OutputStream 后,您可以将其包装在 PrintWriter 中,以便更轻松地发送命令。
同样,您可以使用 channel.getInputStream()
获取一个 InputStream,您可以从中读取结果。
OutputStream os = channel.getOutputStream();
PrintWriter writer = new PrintWriter(os);
InputStream is = channel.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
channel.connect();
writer.println("ls -l");
String response = reader.readLine();
while(response != null) {
// do something with response
response = reader.readLine();
}
writer.println("pwd");
如果您决定使用 setInputStream()
而不是 getOutputStream()
那么您只能这样做一次,因此您必须将所有行放入一个字符串中:
channel.setInputStream(getInputStream("ls -l\npwd\n"));
(我认为您不需要 \r
,但如果需要请重新添加)
如果您不熟悉使用流、写入器和读取器,请在使用 JSch 之前对这些进行一些研究。