Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过JAVA JSch运行putty脚本_Java_Jsch - Fatal编程技术网

无法通过JAVA JSch运行putty脚本

无法通过JAVA JSch运行putty脚本,java,jsch,Java,Jsch,我必须将一个文件从一个位置移动到另一个位置,然后运行名为Irel_Wrapper的脚本 在putty中,我使用了/home/location mv filename 所以在Java中,我使用了channelExec,并且我能够执行上面的场景,即移动文件,因为mv命令是putty命令 但是我不能运行脚本Irel_包装器,我猜是因为它不是putty原生命令,所以我不能在java中使用channelExec来运行它 我基本上需要用cd命令打开一个位置并运行irel_包装器脚本。我尝试了一种方法,但没有

我必须将一个文件从一个位置移动到另一个位置,然后运行名为Irel_Wrapper的脚本

在putty中,我使用了/home/location mv filename

所以在Java中,我使用了channelExec,并且我能够执行上面的场景,即移动文件,因为mv命令是putty命令

但是我不能运行脚本Irel_包装器,我猜是因为它不是putty原生命令,所以我不能在java中使用channelExec来运行它

我基本上需要用cd命令打开一个位置并运行irel_包装器脚本。我尝试了一种方法,但没有成功。 我得到的错误:未找到Ksh 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显示输出的方式打印出所有内容。。你能帮我用一个模型代码单独显示指挥官的输出吗??