2012-12-07 27 views
0

運行bash命令時,解決的許可。當我從控制檯一切運行命令即可:如何從Java

sudo -u oracle fgrep ... 

當我運行從Java代碼中使用ProcessBuilder相同的命令,須藤不工作,和我需要將chmod設置爲775,否則我無權讀取日誌。

爲什麼不能正常工作?有沒有讀取日誌沒有chmod 775的選項?

這裏是我如何使用ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("bash", "-c", command); 
Process shell = pb.start(); 

InputStream is = shell.getInputStream(); 
+1

什麼是您使用的Java代碼? –

+0

^that and ... ,,,, –

+0

你的命令是否要求輸入? – Shurmajee

回答

0

既然你說chmod 775它的工作原理,很明顯你的過程沒有權限。

您可以使用sudo運行Java:

sudo java ClassFileName 

或者只是添加sudo爲你傳遞給bash進程數組中的第一個字符串:

command[0]="sudo -u oracle "; 

//command[1]=commandname; 

//command[2...n]=Other params; 

假設用戶oracle是在sudoers中列表並且不會要求輸入密碼,這會像使用sudo時它在命令行中的運行方式一樣運行。

+0

和bash和-c的說法嗎?我的命令看起來像...新的ProcessBuilder(「bash」,「-c」,「sudo -u oracle fgrep ...」); – hudi

+0

是的。那就對了。當它在shell中執行時,它看起來像:'bach -c「sudo commandname param1 param2 ...」' –

0

一個。你不需要bash -c,當你執行命令時你有一個shell。

b。該命令需要在空間上拆分,然後以數組的形式傳遞給ProcessBuilder。

+0

? PB的參數是字符串...不是數組 – hudi

+0

如果你仔細看看它是一個String數組:'ProcessBuilder(String ... command)' –

+0

沒有這個問題,因爲當我將chmod設置爲775時,這個工作,所以我運行命令勉強 – hudi