【问题标题】:unable to execute a .sh script with Jsch无法使用 Jsch 执行 .sh 脚本
【发布时间】:2011-10-01 10:46:54
【问题描述】:

我正在尝试使用 ssh api Jsch 从我的 java 应用程序(在我的 Windows 7 站上)在 unix 服务器中执行脚本 shell。

我正在使用“start_lm”的脚本外壳是一个 C 二进制文件。

这是我正在使用的代码(来自 Jsch 网站示例)

      try{
      JSch jsch=new JSch();  

      Session session=jsch.getSession(user, host, 22);

      UserInfo ui=new MyUserInfo();
      session.setUserInfo(ui);
      session.connect();

      String command="user/psi/start_lm";

      Channel channel=session.openChannel("exec");
      ((ChannelExec)channel).setCommand(command);

      channel.setInputStream(null);

      ((ChannelExec)channel).setErrStream(System.err);

      InputStream in=channel.getInputStream();

      channel.connect();

      while(true){

        if(channel.isClosed()){
          System.out.println("exit-status: "+channel.getExitStatus());
          break;
        }
        try{Thread.sleep(1000);}catch(Exception ee){}
      }
      channel.disconnect();
      session.disconnect();
    }

我得到的错误是

exit-status: -1 是什么意思

感谢您的帮助。

【问题讨论】:

  • 如何将您的代码简化为相关示例?里面有很多我们不需要看到的绒毛。
  • 你能用命令行ssh user@host user/psi/start_lm执行同样的命令吗?

标签: java shell jsch


【解决方案1】:

我认为有问题

". ./start_lm.sh

它应该在当前目录中提供的脚本下方

"./start_lm.sh

如退出状态127 所说

127 "command not found" illegal_command 

【讨论】:

  • 用这个 o 得到 ksh: /start_lm.sh: not found exit-status: 1
  • 检查我的编辑,“start_lm.sh”是否存在于您的当前目录中?如果不提及完整路径
  • 我使用完整路径进行了编辑,但现在我得到了 exit-status -1 可以吗?谢谢你的回复
  • 成功退出代码是0。同样在上面的代码中,它应该是 String command=". /user/psi/start_lm.sh"; 而不是 String command="user/psi/start_lm";
  • getExitStatus - 返回:远程命令返回的退出状态,或 -1,如果命令尚未终止(或此通道类型没有命令)。 是你确定频道打开正常吗?
【解决方案2】:

String command="/bin/sh /user/psi/start_lm.sh";

请尝试上述方法,因为 jsch 可能正在使用非交互式 shell。

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2018-03-25
    • 2014-05-30
    • 2015-03-13
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多