无法通过JAVA JSch运行putty脚本
我必须将一个文件从一个位置移动到另一个位置,然后运行名为Irel_Wrapper的脚本 在putty中,我使用了/home/location mv filename 所以在Java中,我使用了channelExec,并且我能够执行上面的场景,即移动文件,因为mv命令是putty命令 但是我不能运行脚本Irel_包装器,我猜是因为它不是putty原生命令,所以我不能在java中使用channelExec来运行它 我基本上需要用cd命令打开一个位置并运行irel_包装器脚本。我尝试了一种方法,但没有成功。 我得到的错误:未找到Ksh Irel 我的代码:无法通过JAVA JSch运行putty脚本,java,jsch,Java,Jsch,我必须将一个文件从一个位置移动到另一个位置,然后运行名为Irel_Wrapper的脚本 在putty中,我使用了/home/location mv filename 所以在Java中,我使用了channelExec,并且我能够执行上面的场景,即移动文件,因为mv命令是putty命令 但是我不能运行脚本Irel_包装器,我猜是因为它不是putty原生命令,所以我不能在java中使用channelExec来运行它 我基本上需要用cd命令打开一个位置并运行irel_包装器脚本。我尝试了一种方法,但没有
public ArrayList<String> deployIrelWrapper() throws JSchException, IOException {
ConnectAndCreateSession();
String GrepComandConsole = null;
StringBuilder sb = new StringBuilder();
Channel channel1 = session.openChannel("exec");
String command = "cd /pre/d02/pinDap75a/opt/ifw/vf/cdr/p3/out/irel && irel_wrapper";
BufferedReader br = null;
java.io.InputStream in = channel1.getInputStream();
((ChannelExec) channel1).setCommand(command);
((ChannelExec) channel1).setErrStream(System.err);
System.out.println("Connect to Channel...");
channel1.connect();
System.out.println("****Channel Connected****");
System.out.println();
String line;
try {
br = new BufferedReader(new InputStreamReader(in));
while ((line = br.readLine()) != null) {
sb.append(line + " ");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ArrayList<String> ResultSet = new ArrayList<>();
ArrayList<String> ResultSetOutput = new ArrayList<>();
System.out.println("Expected output");
String words = sb.toString();
String[] result = words.split(" ");
for (String ss : result) {
ResultSet.add(ss);
}
for (int i = 0; i < ResultSet.size(); i++) {
GrepComandConsole = ResultSet.toArray()[i].toString();
ResultSetOutput.add(ResultSet.toArray()[i].toString());
System.out.println(ResultSetOutput);
}
channel1.disconnect();
session.disconnect();
return ResultSetOutput;
}
请不要重复这个问题。
我能够执行命令,如mv command cd。。或SFTP传输。。但要在用CD命令打开路径后执行脚本,我无法获得它。我正在使用JSCHlib
如何手动完成:
我登录到putty。
打开路径:cd home/apt/cdr/irel/
运行irel_包装器:irel_包装器
然后,将填充一些其他详细信息,如GSM3A、Voic、NET3B等。。
下一个最终命令:irel_包装器GSM3A
这就是我们通过putty手动实现的方式,我尝试使用java和Jsch实现自动化。因此,我能够实现SFTP和其他简单命令,如mv和ls。。除了这个Irel包装。。但是当我用手做的时候,它工作的很好。因此,我想没有拼写错误。问题是ssh连接在默认情况下不会启动shell。为了在shell中执行脚本,需要启动一个终端
Channel channel = session.openChannel("shell");
您将以exec启动它,它只允许您运行程序,而不允许运行shell脚本。有关它们之间差异的更多信息,请参见此处:
对不起,你找了这么久。节日快乐。这是不对的。exec通道使服务器运行$SHELL-c“客户机请求的命令”。客户端请求的命令可以是任何有效的shell命令,例如OP请求的cd/path&&runsomething表单。它工作正常!但我无法在输出之间迭代。。我的意思是,我是cd命令的输出,单独打印在控制台上。。但是您提到的代码从登录时就以putty显示输出的方式打印出所有内容。。你能帮我用一个模型代码单独显示指挥官的输出吗?Ksh Irel not found意味着在远程系统上执行Irel_包装的shell找不到这个Irel程序。您可能拼错了该命令的名称,或者该命令实际上不存在于系统中,或者不在您的命令路径中。您能否编辑您的问题以包含此irel_包装脚本的文本,并告诉我们此irel程序在远程系统上的实际存储位置?它工作正常!但我无法在输出之间迭代。。我的意思是,我是cd命令的输出,单独打印在控制台上。。但是您提到的代码从登录时就以putty显示输出的方式打印出所有内容。。你能帮我用一个模型代码单独显示指挥官的输出吗??