Я выполняю команду rm через ssh
, используя библиотеку jsch
. Команда отправляется и выполняется правильно. Но когда файл я хочу удалить, не найден в каталоге, я получаю сообщение об ошибке следующим образом:ssh через java, ошибка магазина в переменной
No such file or directory
Я хочу, чтобы сохранить сообщение об ошибке в переменной и использовать его впоследствии.
В настоящее время отображается это сообщение, когда выполняются следующие:
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
после channel.connect() отображается MESG сообщение об ошибке. Как я могу сохранить его в переменной, скажем, строку и распечатать ее после завершения?
Ниже приведен основной класс.
String SSHHOST = "127.0.0.1";
int SSHPPORT = 22;
String SSHPUSER = "user";
String SSHPPASS = "pass";
StringBuilder result = new StringBuilder();
System.out.println("Connecting To Server "+SSHHOST);
JSch jsch = new JSch();
Session session=jsch.getSession(SSHPUSER, SSHHOST, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(SSHPPASS);
session.connect();
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand("find /home/test/DC* -print -exec rm {} \\;|wc -l");
channel.setInputStream(null);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
((ChannelExec)channel).setErrStream(bos) ;
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
String result2 = bos.toString();
System.out.println(result2);
byte[] tmp=new byte[1024];
while(true)
{
while(in.available()>0)
{
int i=in.read(tmp, 0, 1024);
if(i<0)break;
out=new String(tmp, 0, i);
}
if(channel.isClosed())
{
//System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try
{
Thread.sleep(1000);
}catch(Exception ee){}
}
channel.disconnect();
session.disconnect();
int status = channel.getExitStatus();
System.out.println(out.trim());
if (channel.getExitStatus() == 0)
{
System.out.println("Perso file purging process completed successfully.");
System.out.println("exit-status: "+channel.getExitStatus());
System.out.println("Number of perso files deleted : "+out);
}
else
{
System.out.println("Perso file purging process completed with errors.");
}
Я все еще не могу получить сообщение об ошибке, когда файлы не найдены в каталоге с указанным выше кодом.
Аргумент OutputStream. можете ли вы указать, как написать ByteArrayOutputStream, а затем построить строку из этого? – Shann
Что-то вроде: ByteArrayOutputStream bos = новый канал ByteArrayOutputStream(); (канал ChannelExec) .setErrStream (bos); InputStream in = channel.getInputStream(); channel.connect(); Строковый результат = bos.toString(); – DaveH
Я обновил код. но я все еще не могу получить сообщение об ошибке. Я разместил основной класс в вопросе. – Shann