当前位置: 首页 > 知识库问答 >
问题:

无法通过JAVA JSch运行putty脚本

雷浩思
2023-03-14

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

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

所以在Java我使用通道(Exec),我能够执行上述场景,即移动文件作为mv命令是一个puty命令。

但是我不能运行脚本Irel_Wrapper(我的猜测是,因为它不是一个油灰本地命令,我不能在java与通道(Exec)。

我基本上需要用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命令打开一个路径后,我无法执行脚本。我正在使用Jsch lib。

如何手动完成:
我登录putty
打开路径:cd home/apt/cdr/irel/
运行irel_包装器:irel_包装器
然后填充一些其他详细信息,如GSM3A、Voic、NET3B等
下一个最终命令:irel_包装器GSM3A

这就是我们通过putty手动实现的方式,我尝试使用java和Jsch实现自动化。所以SFTP和其他简单的命令,比如mv和ls,我能够实现。。除了这个Irel包装。。但当我手动操作时,它的工作状态很好。因此我想没有拼写错误。。

共有1个答案

冯鸿哲
2023-03-14

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

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

您将以“exec”的形式启动它,它只允许您运行程序,但不允许运行shell脚本。有关它们之间差异的更多信息,请参见下文:

JSch中的“shell”通道和“exec”通道有什么区别

抱歉你找了这么久。节日快乐。

 类似资料:
  • 我正在通过jenkins运行robot framework,但当我运行构建时,我会得到firefox错误 由用户匿名构建在工作区/var/lib/jenkins/jobs/rocko/workspace中启动 git rev-parse--is-inside-work-tree#timeout=10从远程git存储库获取更改git config remote.origin.url https://

  • 我做错了什么? 作为命令运行docker run-d-name rabbit MQ _ awr-p 5672:5672-p 5673:5673-p 15672:15672 rabbit MQ:3-管理 但http://localhost:15672/没有在浏览器中启动 下面日志

  • 我正在使用DB2 V10.5(windows),试图尝试使用Liquibase。 我正在使用liquibase-3.5.3-bin。我用以下参数设置了liquibase.properties文件。 我无法设置类路径使用多个罐。所以当我奔跑时 我得到了丢失snakeyaml jar的错误 我为类路径尝试的选项: 但不知何故,它不起作用。 当我运行Liquibase时,有人能建议我如何设置类路径,以便

  • 问题内容: 我期待从Python的MATLAB。我需要使用MATLAB Image Acquisition Toolbox从摄像机获取少量图像。 MATLAB似乎是一个不错的解决方案,因为图像采集很容易,之后我必须做一些图像处理。我已经搜索了很长时间,但仍然没有找到任何可用于Python的方法。 这是我的一些尝试: mlabwrap 1.1-运行MATLAB脚本: MATLAB脚本如下: 您可以使

  • 我在Hue中使用oozie编辑器调用一个bash shell脚本。 我使用了工作流中的shell操作,并在shell命令中的不同选项下面进行了尝试: null 无法运行程序“sec_test_oozie.sh”(在目录“/data/hadoop/yarn/local/usercache/user/appcache/application_1399542362142_0086/container_1

  • 问题内容: 是否有任何聪明的方法可以通过ssh在远程主机上运行本地Bash功能? 例如: 是的,我知道这行不通,但是有办法实现吗? 问题答案: 您可以使用该命令通过来使功能在远程计算机上可用。有多个选项,具体取决于您要如何运行远程脚本。 要在远程主机上使用该功能: 更好的是,为什么还要麻烦管道: 或者,您可以使用HEREDOC: 如果要发送脚本中定义的所有函数,而不仅仅是发送,请像这样使用: 说明