2015-02-24 2 views
3

я попытался с помощью следующего фрагмента кода:.команда туздЫшпр с Java Runtime.getRuntime() Exec (команда) не генерирующего самосвала

Process p; 

String command="mysqldump -u'scmuser' -p'scm$123' --routines db_name > /home/ubuntu/wh_demo_db_reset.sql"; 
p = Runtime.getRuntime().exec(command); 

файл дампа не генерируется и не бросили какую-либо ошибку. Я не могу предсказать точный вопрос, пожалуйста, помогите мне. заранее спасибо.

ответ

1

Метасимвол «>» реализуется оболочкой; никакая оболочка не участвует в запуске программы с Runtime.exec(), поэтому последние два аргумента mysqldump являются мусором. Используйте форму аргумента массива Runtime.exec(); передать «/ bin/sh» в качестве первого аргумента, «-c» - как второй, а ваша командная строка - третья; таким образом метасимволы оболочки будут интерпретироваться/bin/sh.

Вы можете сформировать CMD массив как:

String[] cmdarray = {"/bin/sh","-c",command}; 
Process process = Runtime.getRuntime().exec(cmdArray); 
+0

Благодаря ..abhijeet я работаю над этим ... это работает на окна машины? если нет, как заставить его работать и с окнами. – Karunakar

+0

Для окон необходимо использовать следующий формат команды: String [] command = new String [] {"cmd.exe", "/ c", "C: /path/to/mysqldump.exe") + " --quick -lock-tables --user = myuser --password = mypwd mydatabase "}; final Process process = Runtime.getRuntime(). Exec (команда); Но вы не сможете перенаправить вывод команды в файл как то, что мы делаем в linux, используя оператор «>». Вы можете сделать это с помощью BufferedReader/Writer. –

+0

Спасибо..abhijeet..but он генерирует файл дампа 0 размера. – Karunakar

Смежные вопросы