java.io.IOException:无法运行程序错误= 2,没有这样的文件或目录

问题描述:

我有一个Java类,我在其中调用runshellscript方法,将执行脚本。它与mysql运行良好,但我似乎无法找出为什么它不适用于psql。这里是我的runshell方法的摘录:java.io.IOException:无法运行程序错误= 2,没有这样的文件或目录

public class RunShellScript { 

public static void runShellScript (String unixCommand) 
{ 
try { 
    Runtime runtime=Runtime.getRuntime(); 
    //Process process=runtime.exec(new String [] { "/bin/csh", "-c", unixCommand}); 
    Process process=runtime.exec(new String [] {unixCommand}); 
    InputStream stderr=process.getErrorStream(); 
    InputStreamReader isr=new InputStreamReader (stderr); 
    BufferedReader br=new BufferedReader (isr); 
    String line=null; 
    System.out.println("<ERROR>"); 

    while((line=br.readLine())!=null) 
     System.out.println(line); 

    System.out.println(line); 
    int exitVal=process.waitFor(); 
    System.out.println("Process exitValue:" + exitVal); 
} 
catch (Throwable t) 
{ 
    t.printStackTrace(); 
} 

问题是,当我把它放在一个鼠标点击事件后它说没有找到命令。这里是代码beuind谅解备忘录事件

private void jMenuItem13MousePressed(java.awt.event.MouseEvent evt) {           

    String shellCommand="vobs/tools/Scripts/DataValidation/mysqlconnection.csh"; 
    RunShellScript.runShellScript(shellCommand); 
    // TODO add your handling code here: 
}      

奇怪的是,当我直接进入目录的脚本所在的位置和类型./mysqlconnection剧本的作品。但是,当我只键入mysqlconnection是说找不到命令。不知何故,它不认可我的脚本名称作为命令?

在类Unix系统上,shell只执行驻留在当前目录中的程序(如果给出了明确的路径)。这是为了防止攻击者将名为ls的程序放在您的主目录中,而不是执行位于/bin/ls的实际ls程序。因此,当前目录从PATH中排除。

另外,尝试移动

int exitVal=process.waitFor(); 

while循环以上。

+0

所以我应该补充的路径,在我的CSH脚本path变量 – rambokayambo 2012-08-03 00:21:30

+0

您应该使用'。在你的代码/ mysqlconnection'代替'mysqlconnection' – ikdc 2012-08-03 00:22:59

+0

我试过......但它不工作。所以你建议我分配我的字符串变量的路径应该是vobs/tools/Scripts/DataValidation/.mysqlconnection.csh“; – rambokayambo 2012-08-03 00:25:46

看起来它类似于我面对,调用一个外壳脚本当问题(包含系统&用户创建的命令)从autosys [autosys - >壳 - >爪哇 - >的ProcessBuilder]从命令
ProcessBuilder意愿和在Linux机器上执行。
这工作时,我登录到Linux中并执行脚本,但它不工作时,我从autosys调用。
实际的问题是$PATH变量,它不是用用户创建的命令的目录设置的。
当在Linux机器和Autosys中执行shell脚本时,我回显了$ PATH变量,在将用户命令路径附加到其工作的$ PATH变量后,从Autosys执行时没有正确设置$ PATH变量。
which (cmd)将返回命令的目录,追加此目录$ PATH然后它将工作。

尝试增加你的脚本路径$ PATH并从您的应用程序中执行

+0

这解决了我的问题。 – Leon 2017-01-07 03:38:45