Java 为什么我的Bash脚本停止了?

Java 为什么我的Bash脚本停止了?,java,bash,ubuntu,Java,Bash,Ubuntu,Bellow是我通过java创建和执行的Bash脚本。它使用几种不同的脚本为RNA序列数据生成统计数据。我的问题是,当脚本被执行时,它在进程停止之前到达脚本的第二阶段。程序不会出错,所需的程序只是停止处理。我已经试着从命令行中单独运行创建的脚本,它完成时没有错误。如有任何建议,将不胜感激 String Trans_ref = "#!/bin/bash \n" + "mkdir -p "+Output+"/"+Sample+"_RSEM \n" + "cd "+Output+"/"+Sampl

Bellow是我通过java创建和执行的Bash脚本。它使用几种不同的脚本为RNA序列数据生成统计数据。我的问题是,当脚本被执行时,它在进程停止之前到达脚本的第二阶段。程序不会出错,所需的程序只是停止处理。我已经试着从命令行中单独运行创建的脚本,它完成时没有错误。如有任何建议,将不胜感激

 String Trans_ref = 
"#!/bin/bash \n" +
"mkdir -p "+Output+"/"+Sample+"_RSEM \n" +
"cd "+Output+"/"+Sample+"_RSEM \n" +
"PATH=$PATH:"+RSEMprep+" \n" +
"export PATH=$PATH \n" + 
""+RSEMprep+"/rsem-prepare-reference --no-polyA --bowtie "+Output+"/Trans_CDHIT.fast Trans_CDHIT.RSEM \n" +    
""+RSEMprep+"/rsem-calculate-expression --paired-end -p "+CPU+" "+Output+"/SRR617145_1.fastq "+Output+"/SRR617145_2.fastq Trans_CDHIT.RSEM Trans_CDHIT.genes.results  \n"+
""+Trinprep+"/util/misc/count_features_given_MIN_FPKM_threshold.pl "+Output+"/"+Sample+"_RSEM/RSEM.genes.results > "+Output+"/"+Sample+"_RSEM/cumul_counts.txt \n"+
""+Trinprep+"/util/filter_fasta_by_rsem_values.pl --rsem_output= "+Output+"/"+Sample+"_RSEM/RSEM.isoforms.results --fasta="+Output+"/Trans_CDHIT.fasta -t 100 --output="+Output+"/"+Sample+"_RSEM/Trans_RSEMfilters.fasta \n" +
""+Trinprep+"/util/bowtie_PE_separate_then_join.pl --seqType fq --left "+Output+"/"+Sample+"_1.fasta --right "+Output+"/"+Sample+"_2.fasta --target "+Output+"/Trans_CDHIT.fasta --aligner bowtie --SS_lib_type FR -- -p 4 --all --best --strata -m 300 \n";  


    System.out.println(Trans_ref);

    FileUtils.writeStringToFile(new File(Output+"/TranRSEM"), Trans_ref);
    StringBuffer Trim = new StringBuffer();

    String cmd = (Output+"/TranRSEM");


Process p;

try{
    p = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c", cmd});

    p.waitFor();

    BufferedReader reader1 = 
                    new BufferedReader(new InputStreamReader(p.getInputStream()));

        System.out.println("Merg Finished");

    } catch (Exception e) {
    e.printStackTrace();


    }
全体

非常感谢您的评论

我设法解决了这个问题。我发现这是java内存的限制。我通过在IDE netbeans的项目属性中使用Xmx20000m命令解决了这个问题


这似乎解决了我的问题

您是否使用“file.setExecutabletrue;”为Output+/TranRSEM设置了可执行权限?你也可以发布生成的shell脚本吗?1。尝试在“.”之后添加“set-x”/bin/bash'查看最后要执行的命令。2.另外,也许稍微简化一下也会有所帮助,为什么不直接像…execcmd;那样执行脚本呢;?3.另一件事是,输出必须是非相对路径——我猜是这样,否则脚本根本不会运行。4.我最后给您的建议是,尝试捕获命令的错误和输出,如包含filter_fasta_[…]的行中所示,在等于符号后面的参数中似乎有一个额外的空格:-rsem_output=+output+/+Sample+。一个好的参数解析器应该很好,但是。@ErikE.Lorenz-我已经使用该方法使其可执行了,不幸的是,我必须在编辑帖子时删除它。@Arnon Zilca-对不起,我将压缩我的代码并尝试set-x,但是错误输出不会发生java仍在等待p.wait脚本作为脚本完成。当从java内部运行时,进程停止处理,但它从不注册为已完成,例如出错等