我有一个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
之类的名称进行更改。