Сбой выполнения команды оболочки при выполнении из Java

Когда я выполняю приведенную ниже команду в командной строке, она показывает все хранимые процедуры и таблицы в базе данных sybase.

printf 'sp_help\ngo\n' | isql -Uxx -Pxxxx -Dxxxxx

Но когда я делаю то же самое в Java. Это не возвращает никакого результата. Может кто-нибудь сказать мне, что проблема с моим кодом ниже:

public class test
{
  public static void main(String[] args)
  {
   String cmd = "printf "+"\'sp_help\ngo\n\'"+"| isql -Uxx -Pxxxx -Dxxxxx" ;
   try{ 
          Process p;
          p = Runtime.getRuntime().exec(cmd);
          p.waitFor();
          String line; 
          BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

           while ((line = reader.readLine())!=null){
           System.out.println("Row is :" + line);
   } catch(Exception e)
       {
           System.out.println("Exception Caught : " + e);
       }

  }

}

РЕДАКТИРОВАТЬ Я выполнил это, как предложено ниже Darkdust, но все равно это не работает.

try{
          Process p;
          p = Runtime.getRuntime().exec("sh -c \'printf \"sp_help\ngo\n\" | isql -Uxx -Pxxxxx -Dxxxxxx\'");
          p.waitFor();
          String line;
          BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

           while ((line = reader.readLine())!=null){
           System.out.println("Row is :" + line);
  }
 }
       catch(Exception e)
       {
           System.out.println("Exception Caught : " + e);
       }

Но команда:

sh -c 'printf "sp_help\ngo\n" | isql -Usa -Psybase11 -Dcnadb'

Работает в командной строке.

Я также попробовал с:

p = Runtime.getRuntime().exec(new String[]{"sh","-c","\'printf \"sp_help\ngo\n\"","|isql -Uxx -Pxxxxx -Dxxxxx\'"});

Но без успеха.

Ответы на вопрос(1)

Ваш ответ на вопрос