2016-09-28 57 views
0

我寫了一個bash腳本。舉個例子,一個簡單的例子:僅當通過java應用程序打開終端時符號查找錯誤

#!/bin/bash 
gnuplot -e "set terminal pdf; set output'/tmp/test.pdf'; plot [-10:10] sin(x);" 

這個腳本的名字應該是test.sh。 我可以通過我的shell執行這個腳本並創建test.pdf。我應該通過一個通過ProcessBuilder調用這個腳本的Java應用程序來執行這個腳本,否則不會創建pdf。該腳本被訪問,並打開其他程序,如gedit。 awk等工程。似乎gnuplot有問題。

有誰知道這是爲什麼,我該如何解決這個問題?

的Java代碼:

String command = "/tmp/test.sh"; 

try { 
    ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c",command); 
    pb.start(); 
}catch (IOExeption e1) { 
    e1.printStackTrace() 
} 

---更新---

似乎有是另一個問題。感謝ccarton和muzido,如果通過shell執行java-jar文件,則會執行gnuplot腳本。如果我把它嵌入到看起來簡單這樣execute_jar.sh另一個shell:

#!/bin/bash 
java -jar test.jar 

這execute_jar.sh由只能執行shell腳本和我不能修改另一個Java應用程序執行。 這個父應用程序有問題嗎?或者是一種解決方法嗎? gnuplot腳本必須通過我的test.jar執行,因爲其他參數是在jar中生成並賦予腳本的。

---更新2 ---

所以我一直在尋找更多一些,並測試一點點,我改變了Test.jar的,以便它不執行test.sh只是打開帶有「xterm」的shell。在這裏,我然後手動鍵入腳本,我得到錯誤"gnuplot: symbol lookup error: /usr/lib64/libQtSvg.so.4: undefined symbol" 任何想法?

---更新3 ---

我因子評分,因爲 「/usr/lib64/libQtSvg.so.4」 的存在是我是一個圖書館的問題。所以我嘗試export LD_LIBRARY:$LD_LIBRARY:/usr/lib64但仍然是相同的錯誤。

---更新4 ---

我改變了標題

+0

如果你還在爲此苦苦掙扎,請[編輯]你的問題,包括用於執行這個腳本的Java源代碼。 – Kenster

+0

使用「rpm -qa | grep libQt」時,在由jar打開的終端和「普通」終端中都沒有出現任何內容,但該文件存在於無法查找符號的路徑中(位於/ usr /lib/libQtSvg.so.4) – nguvi

回答

0

添加到「行結束

#!/bin/bash 
gnuplot -e "set terminal pdf; set output'/tmp/test.pdf'; plot [-10:10] sin(x);" 

可執行文件。

chmod +x /tmp/test.sh 

這是java代碼;運行時,test.pdf創建在/ tmp /中。

public class RunShellScript 
{ 
    public static void main(String[] args) 
    { 
      String command = "/tmp/test.sh"; 
      try{ 
        ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c",command); 
        Process p = pb.start(); 
        p.waitFor(); 
        int shellExitStatus = p.exitValue(); 
        System.out.println(shellExitStatus); 
      }catch(Exception e){ 
        e.printStackTrace(); 
      } 
    } 
} 

什麼時候運行這個java控制檯輸出?

+0

我得到了shellExitStatus 0,如果我通過eclipse執行它,則會創建pdf文件。如果我將它導出爲jar並在shell中使用「java -jar file.jar」執行它,則不會創建pdf ... – nguvi

+0

運行「java -cp file.jar RunShellScript」時,這也在我的環境中創建了pdf。 –

+0

我在CentOS上,當使用你的命令時,它告訴我「無法找到或加載RunShellScript」。我正在使用Bash Shell。 – nguvi

0

腳本實際上不是可執行文件。 shebang(#!)由您的命令shell解釋。 ProcessBuilder不會那樣做。要從Java運行此命令,您需要直接執行/ bin/bash,並將此腳本作爲命令行參數傳遞。

例子:

ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "test.sh"); 
+0

謝謝如何直接執行/ bin/bash並將此腳本作爲命令行參數傳遞? – nguvi

+0

似乎還有另外一個問題:如果我通過控制檯用「java -jar ...」執行jar, 沒問題。如果我將jar執行寫入bash腳本並通過另一個java應用程序啓動此腳本,則不會執行gnuplot。第一個Java應用程序可以解決問題嗎? – nguvi

相關問題