Сбой выполнения команды оболочки при выполнении из 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\'"});
Но без успеха.