我有一个Java代码,它需要一个数据文件,将数据复制到perl脚本,然后从shell脚本调用perl脚本。以下是相关代码:

    public String returnStringForPerlScript(ArrayList<String> arrayContainingPerlScriptArguments, String singularFilePath) throws IOException{
    String argFileName = null;//5
    String argParsedFileName = null;//
    argParsedFileName = arrayContainingPerlScriptArguments.get(4);
    argFileName = arrayContainingPerlScriptArguments.get(5);
    System.out.print("ARG1: "+argFileName);
    System.out.print(" ARG2: "+argParsedFileName);

    String runCmdString = singularFilePath+"perlscript.pl";
    String runCmd  = singularFilePath+"runPerlScript.sh";


    return runCmd;
}


上面的代码是一个单独类中的方法。下面的代码是Process实际初始化和运行的地方。

p = dfp.returnStringForPerlScript(perlParam, singularDirectoryPath);
System.out.println("Running from: "+p);
process = Runtime.getRuntime().exec(p);


令人困惑的是,这段代码在早期就可以很好地工作,而我所更改的只是输出目录。我写了一个完全不同的文件路径,而不是“ singularDirectoryPath”。我很困惑,因为我不知道代码是怎么回事,考虑到它曾经运行过。当我从终端调用“ runPerlScript.sh”时,它起作用了。

我还应该补充一点,我确实尝试使用String []而不是字符串,如下所示:

    String[] cmdArray = {"/bin/tcsh","-c","/filepath/runPerlScript.sh"};
    Process p = Runtime.getRuntime().exec(cmdArray);


仍然没有生成任何输出文件。

最佳答案

验证两件事:


如果您修改了perl脚本,请确保它的第一行具有#!/bin/perl,与您的shell脚本相同,如果您专门使用bash,则必须具有#!/bin/sh#!/bin/bash
您移动的文件必须具有可执行权限,并使用。chmod 755 myFile之类的名称进行更改。

10-06 09:44