无法通过JAVA JSch运行putty脚本

时间:2014-12-25 16:33:18

标签: java jsch

我不得不将文件从一个位置移动到另一个位置并运行名为“Irel_Wrapper”的脚本

在putty我做了/ home / location mv filename。

所以在Java中我使用了channel(Exec),我能够执行上面的场景,即移动文件,因为“mv”命令是一个putty命令。

但我无法运行脚本Irel_Wrapper(我的猜测是因为它不是一个putty本机命令,我无法在带有channel(Exec)的java中执行此操作。

我基本上需要用cd命令打开一个位置并运行irel_wrapper脚本。我尝试了一种方法,但我无法实现它。 我得到的错误:找不到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命令cd ..或SFTP传输的命令..但是在用CD命令打开路径后执行脚本我无法得到它。我正在使用Jsch lib。

如何手动完成:
我登录了腻子 打开路径:cd home / apt / cdr / irel /
运行irel_wrapper:irel_wrapper
 然后列出一些其他细节将填充,如GSM3A,Voic,NET3B等。
下一个最终命令:irel_wrapper GSM3A

这是我们如何通过putty手动完成它,我尝试使用java和Jsch自动化它。 SO SFTP和其他简单的命令,如mv和ls我能够实现..除了这个Irel包装..但是当我手动完成它的工作正常。因此我认为没有拼写错误..

1 个答案:

答案 0 :(得分:0)

问题是ssh连接默认情况下不启动shell。为了在shell中执行脚本,您需要启动终端。

Channel channel = session.openChannel("shell");

你将它作为“exec”启动,它只允许你运行程序,而不是shell脚本。有关它们之间差异的更多信息,请参见此处:

What is the difference between the 'shell' channel and the 'exec' channel in JSch

抱歉,你搜索了这么久。节日快乐。