2014-02-03 4 views
0

Я пытаюсь выполнить Баш скрипт из Java с ProcessBuilder мой код:Java ProcessBuilder и Баш

Process createUser = buildProcess(
      "/bin/su", 
      "-c", 
      "\"/opt/somedir/testdir/current/bin/psql", 
      "--command", 
      commandForUserCreation, 
      /* "'select * from users'", */ 
      "--dbname", 
      "mydbname\"", 
      "myuser" 
      ); 

Проблема заключается в том, что я получаю сообщение об ошибке:

/bin/su: unrecognized option '--dbname' 

Если я ставлю echo на первом месте моих команд он печатает правильную команду в bash, и если я копирую/вставляю эту команду, она работает!

Пожалуйста, помогите мне решить эту проблему.

ответ

2

В качестве единственного аргумента вам необходимо выполнить команду цели в su. Попробуйте следующее:

Process createUser = buildProcess(
      "/bin/su", 
      "-c", 
      "/opt/vmware/vpostgres/current/bin/psql --command " + commandForUserCreation + " --dbname mydbname", 
      myuser 
      ); 
+1

Большое спасибо! Это решает мою проблему – user2739823

0

Это то, что я использую в ProcessBuilder:

String[] command = new String[] {"echo", "Hello"}; 
String workspace = "/bin/su"; 
System.out.println("Trying to run command: "+ Arrays.toString(command)); 
ProcessBuilder probuilder = new ProcessBuilder(command); 
probuilder.directory(new File(workspace)); 

Process process = probuilder.start(); 
InputStream is = process.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String line; 
System.out.printf("Output of running %s is:\n",Arrays.toString(command)); 
while ((line = br.readLine()) != null) { 
    System.out.println(line); 
} 

Я надеюсь, что это помогает.

+0

спасибо Traple. – user2739823

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