2012-08-02 426 views
7

我有一個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是說找不到命令。不知何故,它不認可我的腳本名稱作爲命令?

回答

0

在類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

2

看起來它類似於我面對,調用一個外殼腳本當問題(包含系統&用戶創建的命令)從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

相關問題