从java运行bash脚本

从java运行bash脚本,java,bash,Java,Bash,我的问题很简单,当我试图从Java运行.sh脚本时,脚本不会执行。如果我将脚本更改为一个简单的linux命令,例如ls-all,它工作得很好,因此我猜我在脚本中使用了一个错误的命令,这会停止执行。请帮忙 大卫 Java代码: String cmd = "bash /home/david/burza/getter.sh"; try { Process proc = Runtime.getRuntime().exec(new String[] {"/bin/sh",

我的问题很简单,当我试图从Java运行.sh脚本时,脚本不会执行。如果我将脚本更改为一个简单的linux命令,例如ls-all,它工作得很好,因此我猜我在脚本中使用了一个错误的命令,这会停止执行。请帮忙

大卫

Java代码:

    String cmd = "bash /home/david/burza/getter.sh";

    try {
        Process proc = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", cmd});
        BufferedReader read = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        try {
            proc.waitFor();
        } catch (InterruptedException e) {
            System.out.println(e.getMessage());
        }
        while (read.ready()) {
            System.out.println(read.readLine());
        }
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
Bash脚本:

#! /bin/bash 

wget -O data1.html http://www.rmsystem.cz/kurzy-online/akcie/easyclick;
touch ext_data.txt; 

grep 'table class="tbl1"' ./data1.html | tr '<td>' ' ' | tr '-' 'A' | grep -o -w '[0-9, ]*' | sed 's/  *//g' | sed '/^$/d' | tr ',' '.' > ext_data.txt;

lines=`wc -l ext_data.txt | grep -o '[0-9]*'`;

( echo $lines; cat ext_data.txt ) > ext_data.txt.new && mv ext_data.txt.new ext_data.txt;
#/bin/bash
wget-odata1.htmlhttp://www.rmsystem.cz/kurzy-online/akcie/easyclick;
触摸ext_data.txt;
grep'table class=“tbl1”./data1.html | tr''''''''''tr'-''A''grep-o-w'[0-9,]*'.'sed's/*///g'| sed'/^$/d'| tr'.'>ext_data.txt;
行=`wc-l ext_data.txt | grep-o'[0-9]*'`;
(echo$lines;cat ext_data.txt)>ext_data.txt.new&&mv ext_data.txt.new ext_data.txt;

从命令开头删除“bash”开始

第二,我不确定这个贝壳能不能用!非交互使用时的解释。对于Runtime.exec()调用,我想直接跳到/bin/bash

最后,仅仅让一个读者出现在标准输出上是不够的。您需要积极地从它和stderr中读取,以防止进程在写入太多输出时挂起。为了澄清这一点,您正在等待流程完成(
proc.waitFor()
),然后再处理任何输出。如果进程在退出前写入太多输出,它将阻止等待您清空缓冲区,而您将被阻止等待它退出


阅读本文的全部4页:

您确定脚本已设置为可执行文件吗?也许chmod+x script.sh可以帮助您,您希望得到什么?shell脚本不会将任何内容打印到标准输出,它会将所有输出重定向到文件。BufferedReader是干什么用的?这是一个愚蠢的代码,为输入、输出和错误流编写3个线程,并以交互方式执行,这将使您免于各种麻烦谢谢您的建议,我设法让它运行使用感谢很多。JavaWorld链接被打破了可以任何关键字,我可以搜索这个链接在JavaWorld和修复它吗?