zh9874563321
zh9874563321
2011-11-28 15:23

怎样在java代码中调用执行shell脚本呀

已采纳

遇到个问题   在本地压缩服务器上的xml文件 我就想编写shell教本 脚本内容是链接服务器 找到待压缩文件 压缩文件  说实话 我不知道这样是否可行  试试  但我不知道怎样在java代码中 调用执行shell脚本  谁能指点指点  求教... 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

8条回答

  • aa1aa3 爱上一条鱼 10年前

    [quote]参数很多了 是不是可以写在一块 中间以空格隔开 也就是把所有的参数以空格链接成一个字符串 放入字符串数组作为一个整体变成一个参数[/quote]
    没试过 不确定诶
    不过可以先List list = new ArrayList();
    然后 for循环添加参数 list.add("param" + i);
    然后再 list.toArray();变成 String[] 类型

    点赞 评论 复制链接分享
  • disablebb disablebb 10年前

    你需要把内容写到XXX.sh文件里 然后再调用。
    String cmds = "sh XXX.sh";
    try {
    Runtime.getRuntime().exec(cmds).waitFor();
    } catch (IOException e1) {
    e1.printStackTrace();
    }catch (InterruptedException e) {
    e.printStackTrace();
    }

    点赞 评论 复制链接分享
  • aa1aa3 爱上一条鱼 10年前

    把参数和命令都放字符串数组里吧
    比如

    [code="java"]String[] commands = new String[]{"/home/asyty/start.sh", "param1", "param2"};

    Process child = Runtime.getRuntime().exec(commands);[/code]

    点赞 评论 复制链接分享
  • disablebb disablebb 10年前

    如果在之后的程序想立刻就用解压的xml文件
    加一个Runtime.getRuntime().exec(cmds).waitFor();
    等待执行完在用

    点赞 评论 复制链接分享
  • khan7923 khan7923 10年前

    顶起,简单题 楼上明显在抢分啊!

    点赞 评论 复制链接分享
  • huoyj huoyj 10年前

    [code="java"]
    /**
    * 通过ssh远程执行命令
    *
    * @param target
    * 目标
    * @param cmd
    * 命令
    * @param handler
    * 执行结果的处理器
    * @param rsEncoding
    * 错误信息的字符集,为空默认为UTF-8
    * @throws IOException
    * 连接或执行命令错误抛出异常,原因在e.getMessage()
    */
    public static void execCmd(ExecTarget target, String cmd, ExecResultHandler handler,
    String rsEncoding) throws IOException
    {
    AssertUtil.notNull(target, "SshTarget can not be null.");
    AssertUtil.hasText(cmd, "ssh cmd must has text.");
    String charset = StringTools.hasText(rsEncoding) ? rsEncoding : "UTF-8";
    Session session = null;
    Channel channel = null;
    try
    {
    session = newSession(target);
    channel = session.openChannel("exec");
    ((ChannelExec) channel).setCommand(cmd);

            // 接收错误信息
            PipedOutputStream errOut = new PipedOutputStream();
            PipedInputStream errIn = new PipedInputStream(errOut);
            ((ChannelExec) channel).setErrStream(errOut);
            // 接收结果信息
            InputStream in = channel.getInputStream();
            String uid = UUID.randomUUID().toString();
            File file = new File(FileHelper.getTmpPath() + "/sshRs-" + uid + ".txt");
            FileOutputStream fos = new FileOutputStream(file);
    
            channel.connect();
            FileCopyUtils.copy(in, fos);// 将结果存放至文件
    
            // 判断是否正常退出
            exitChannel(channel, errIn, charset);
    
            errOut.close();
            if (handler != null) handler.handle(file);
        }
        catch (JSchException e)
        {
            throw new IOException(e.getMessage());
        }
        catch (InterruptedException e)
        {
            logger.error(e.getMessage(), e);
        }
        finally
        {
            if (channel != null) channel.disconnect();
            if (session != null) session.disconnect();
        }
    }
    

    [/code]

    点赞 评论 复制链接分享
  • aa1aa3 爱上一条鱼 10年前

    哦 对了 用绝对路径来调用shell脚本不容易出错 比如启动/home/asyty/start.sh

    [code="java"]Runtime.getRuntime().exec("/home/asyty/start.sh");[/code]

    点赞 评论 复制链接分享
  • aa1aa3 爱上一条鱼 10年前

    用一个函数就可以调用了

    [quote]String = "sh ./xxxx.sh"; //命令行
    Runtime.getRuntime().exec(cmd);[/quote]

    点赞 评论 复制链接分享

相关推荐