[英]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.