Если я запускаю команду 'source openr c', где 'openr c' - это файл, использующий библиотеку com.jcraft.jsch.JSch, и читаю вывод, используя getInputStream, тогда он работает, как и ожидалось, но если я пытаюсь Ошибка чтения с использованием getErrStream или getExtInputStream. Я получаю сообщение об ошибке 'bash: строка 0: источник: требуется аргумент имени файла источник: использование: имя файла источника [аргументы]'. Как я могу сделать это правильно?
пример кода:
public static void executeJschCommandNew(String remoteHostAddress, int remoteHostPort, String remoteUsername,
String remotePassword,String command) throws JSchException, IOException, InterruptedException{
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session=jsch.getSession(remoteUsername, remoteHostAddress, 22);
session.setPassword(remotePassword);
session.setConfig(config);
session.connect();
System.out.println("Connected/. ");
Channel channel=session.openChannel("exec");
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err,true);
//((ChannelExec)channel).
((ChannelExec)channel).setCommand(command);
InputStream in=channel.getInputStream();
InputStream err = channel.getExtInputStream();
channel.connect();
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status : "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
// String err = IOU
tmp=new byte[1024];
while(true){
while(err.available()>0){
int i=err.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status : "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
//System.out.println(" err : "+err);
channel.disconnect();
session.disconnect();
System.out.println("DONE");
}