Передача аргумента из кода Java в сценарий оболочки, который принимает ввод из командной строки - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу передать имя скрипту оболочки, который принимает ввод из командной строки. Вывод, который я хочу получить, заключается в том, что я должен быть в состоянии отправить имя из моего кода Java в сценарий.

Я новичок в JSch и ExpectJ

Ниже моя оболочка Сценарий:

! / Бен / Баш

эхо "Имя:" читать имя echo "Введенное имя: $ name"

Это код Java:

public static void main(String[] args) {

    String flag = "";
    try {
        /**
         * Create a new Jsch object This object will execute shell commands
         * or scripts on server
         */
        JSch jsch = new JSch();

        Session session = jsch.getSession("xxxx",
                "xxxxxx", xx);
        session.setConfig("StrictHostKeyChecking", "no");
        session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password,gssapi-with-mic");
        session.setPassword("mcts@123");
        session.connect();

        if (session.isConnected()) {
            Channel channel = session.openChannel("exec");
            ((ChannelExec) channel).setCommand("cd /home/Inder; ./hello.sh");
            ((ChannelExec) channel).setErrStream(System.err);

            InputStream in = channel.getInputStream();

            /*channel.connect();
            if (channel.isConnected())
                System.out.println("Channel connected");*/
            ExpectJ exp = new ExpectJ();
            Spawn s = exp.spawn(channel);
            s.expect("Name:");
            s.send("abcd");
           // s.expect("Entered name:");
            System.out.println("New Text : " + s.getCurrentStandardOutContents());
            s.stop();
            channel.disconnect();
            session.disconnect();
        } else {
            flag = "NATL";// Not able to Login(NATL)

        }
        // retrieve the exit status of the remote command corresponding to
        // this channel

    }catch(JSchException e){
        flag = "NATL";
        e.printStackTrace();
    }
    catch (Exception e ) {
        e.printStackTrace();
        System.err.println("Error: " + e.getMessage());

    }
}

Токовый выход: Имя: / * Это исходит от эха сценария * /
Новый текст: Имя: / это происходит из строки s.getCurrentStandardOutContents () /

...