2013-03-12 1 views
1

Мне нужно выполнить команды linux из JSP. Он работает нормально. Но мне нужно запустить некоторый файл sh в определенном каталоге в linux через JSP. say /home/username/something/start.shИзмените PWD linux от JSP

try{ 
String command= "cd /home/username/something"; 

Runtime.getRuntime().exec(command); 
Runtime.getRuntime().exec("./start.sh") 


out.println("Child"); 
} 
catch(Exception e) 
{ out.println("Error"); 
} 

В нем говорится, что FIle или Directory не найдены.

Я пробовал Runtime.getRuntime().exec("pwd"), Он показывает что-то вроде "[email protected]" !! : O

Мне нужно изменить pwd и выполнить некоторые команды через jsp. Как я могу это сделать?? Любая помощь будет оценена по достоинству.

+0

Это 'java.lang.UNIXProcess @ fc9d2b' строки вы получаете является' ToString() 'в' Process' Возвращается экземпляр 'exec()'. Чтобы увидеть вывод команды, вы должны [записать стандартный вывод «Процесс»] (http://stackoverflow.com/q/882772/851811). –

+0

Можете ли вы рассказать, как захватить стандартный вывод «Процесса» ?? – BinaryMee

+0

Используйте ['Process.getOutputStream()'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Process.html#getOutputStream()). –

ответ

7

Вы не должны (и на самом деле, похоже, не можете) установить такой рабочий каталог. Каждый объект Process, заданный Runtime.exec(), будет иметь свой собственный рабочий каталог.

Как указано в How to use “cd” command using java runtime?, вы должны использовать версию с тремя аргументами Runtime.exec(), в которой вы указываете File, который будет рабочим каталогом. От его javadoc:

Выполняет указанную команду и аргументы в отдельном процессе с указанной средой и рабочим каталогом.

Или еще лучше, использовать ProcessBuilder вместе с ProcessBuilder.directory() вместо:

ProcessBuilder pb = new ProcessBuilder("start.sh"); 
pb.directory(new File("/home/username/something")); 
Process p = pb.start();