bash: строка 0: источник: требуется аргумент имени файла источник: использование: имя файла источника [аргументы] ошибка при выполнении команды источника через jsch - PullRequest
0 голосов
/ 13 февраля 2020

Если я запускаю команду '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");
    }
...