Ssh
使用 Jsch 在 Windows 上執行 FNDLOAD 命令
通過 ssh 連接到我的 unix 伺服器後,我正在嘗試
FNDLOAD
使用 Jsch 執行命令。但是命令給了我以下錯誤bash:FNDLOAD:找不到命令
此外,如果我嘗試讀取任何環境變數,例如,等等
JAVA_TOP
,FND_TOP
它不會給出任何輸出。但是使用此程式碼,讀取 .sh 文件等所有其他命令都可以正常工作。程式碼如圖所示:import java.io.InputStream; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.util.Properties; public class ShellExecuter { /** * @param args */ public static void main(String[] args) { String host = "10.111.111.11"; String user = "username"; String password = "password"; String FND_TOP = "/u01/oracle/fs1/appl/fnd/12.0.0"; String command = "FNDLOAD user/pass O Y DOWNLOAD " + FND_TOP + "/patch/115/import/abc.lct " + "/home/applvis/JAVA/abc.ldt PROGRAM APPLICATION_SHORT_NAME=XX " + "CONCURRENT_PROGRAM_NAME=UPLOAD_TOOL"; try { Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch(); Session session = jsch.getSession(user, host, 22); session.setPassword(password); session.setConfig(config); session.connect(); System.out.println("Connected"); Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); channel.setInputStream(null); ((ChannelExec) channel).setErrStream(System.err); InputStream in = channel.getInputStream(); channel.connect(); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) { break; } System.out.print(new String(tmp, 0, i)); } if (channel.isClosed()) { System.out.println("exit-status: " + channel.getExitStatus()); break; } try { Thread.sleep(1000); } catch (Exception ee) { } } channel.disconnect(); session.disconnect(); System.out.println("DONE"); } catch (Exception e) { e.printStackTrace(); } } }
誰能幫我閱讀環境變數和執行
FNDLOAD
命令。我不明白我在做什麼錯。PS:
FNDLOAD utility
在伺服器上正確安裝。當我從 putty 執行相同的命令時,我能夠達到預期的結果。有沒有人有任何建議或任何東西可以幫助我解決這個問題。我很震驚。我嘗試了很多方法,但沒有任何效果。任何幫助表示讚賞。
終於讓它工作了。這是解決方案
FNDLOAD 是一個作業系統命令行執行檔。為了執行它,我們必須確保在 shell 中正確設置了我們的環境,然後再呼叫
FNDLOAD
.((ChannelExec) channel).setCommand("cd path/to/env/file; . ./envFileName.env;"+ command);