簡體   English   中英

從Java代碼運行Unix Shell腳本並處理提示

[英]Running Unix shell script from Java code, and dealing with prompts

我有一個運行Shell命令的Java程序。 一切正常,我可以查看命令是否有效或有錯誤...,除非命令提示用戶輸入更多信息。

例如,當我運行命令ssh-keygen -t rsa -b 4096 -f my_key_name ,該程序將永久旋轉而不返回給用戶,因為它正在等待我輸入密碼。 現在,我知道可以在-P ""中跳過添加密碼的操作,但是我的問題是其他提示輸入信息的命令。

我只想知道如何將提示文本返回給用戶(因為我實際上並不需要用戶輸入對提示的響應)。

RunCommandDto runCommandDto = new RunCommandDto();
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec('ssh-keygen -t rsa -b 4096 -f my_key_name');

BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

String output = "";

while ((String sInOut = stdInput.readLine()) != null) {
    output += sInOut + "\n";
}

while ((String sErr = stdError.readLine()) != null) {
     output += sErr + "\n";
}

可以通過proc.getOutputStream()訪問執行進程的標准輸入 。通過此流發送的所有內容都將通過其stdin傳遞到ssh-keygen進程。

當然,如果您沒有發送期望的輸入,該過程可能會返回一些警告消息並繼續等待。 您需要發送的內容將非常取決於您要發送到的過程。

另外:您正在通過讀取InputStream和Error Stream處理ssh-keygen的輸出。 但是,您可能希望在一個單獨的線程中執行此操作-現在的方式,如果該進程在寫入stdout之前向stderr寫入過多內容,則可能由於緩沖區已滿而掛起...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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