[英]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()
connect()
。 您只能執行其中之一,一次。
對於您的目的, 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 之前對這些進行一些研究。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.