簡體   English   中英

將輸入鍵從 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() 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM