2012-06-28 81 views
1

我有一個獨立應用程序,它在Ubuntu中運行Shell腳本(帶參數)。在服務器上運行Shell腳本

ProcessBuilder pb1 = new ProcessBuilder("sh","deltapackage_app.sh","part_value","pathtofile"); 
Process process1 = pb1.start(); 

我正在通過GUI參數。 現在我想在web應用程序中實現同樣的事情,我可以將輸入形式的網頁發送到服務器,然後服務器將執行帶參數的shell腳本。

任何人都可以建議我這樣做的最佳方式。我應該用什麼東西來做到這一點。

我知道我必須學習很多關於服務器的東西。或者我可以使用基於瀏覽器的應用程序相同的代碼

+0

你應該關心的安全性,如果你允許用戶提供的參數shell腳本。平原/不加引號/未轉義的shell參數允許在命令行上執行進程,例如從互聯網上下載可執行文件... – Black

回答

1

考慮下面的代碼行:

Process p = Runtime.getRuntime().exec("/bin/sh -c /bin/ls > ls.out"); 

這是爲了執行一個Bourne殼和具有殼執行 ls命令,LS的輸出重定向到文件ls.out。使用/ bin/sh的原因是解決了Java內部重定向標準輸出 的問題。不幸的是,如果你試試這個 什麼都不會發生。當這個命令字符串被傳遞給exec()方法時,它將被分解成一個字符串數組,其元素爲 爲「/ bin/sh」,「-c」,「/ bin/ls」,「>」和「ls.out」。這將會失敗, 由於sh期望只有一個參數到「-c」開關。爲了使這個 工作的嘗試:

String[] cmd = {"/bin/sh", "-c", "/bin/ls > out.dat"}; 
    Process p = Runtime.getRuntime().exec(cmd); 

由於命令行已經是一系列字符串,字符串 將簡單地由exec()方法裝入命令陣列和 傳遞到新過程就是這樣。因此,shell會看到「-c」和「/ bin/ls> ls.out」命令並正確執行。

http://www.ensta-paristech.fr/~diam/java/online/io/javazine.html

相關問題