Ожидаемое приключение

#java #shell #unix #expect #nested-if

#java #оболочка #unix #ожидать #вложенный-если

Вопрос:

Это мой скрипт

 echo "Name:"
read name
if [ "$name" == "abcd" ]; then
    echo "correct username"
    echo "Password:"
    read password
    if [ "$password" == "pwd" ]; then
        echo "Hello"
    else
        echo "Wrong password"
    fi
else
    echo "wrong username"
fi
  

=================================================================================

Это мой Java-код

 import java.io.IOException;
import java.util.*;

import expectj.*;

public class Trial {
    public static void main(String[] args) {

        ExpectJ exp = new ExpectJ();
        String command = "sh /root/Desktop/hello.sh";
        Spawn s = null;
        try {           
            s = exp.spawn(command);         
            s.expect("Name:");
            s.send("abcdn");
            System.out.println("Current status: " s.getCurrentStandardOutContents());           
            s.expect("correct username");   
            s.expect("Password:");
            s.send("pwdn");
            s.expect("Hello");
            System.out.println("final output: "   s.getCurrentStandardOutContents());
            System.out.println("Possible errors: "   s.getCurrentStandardErrContents());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("ioen");
        } catch (TimeoutException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("toen");
        } finally {
            if (s != null) 
                s.stop();           
        }       
    }
}
  

============================================================================

И это мой ВЫВОД

 Name:
Current status: Name:
correct username
Password:
  

============================================================================

Дальше не продвигается.Это тоже не завершается.. Я не знаю почему..

Ответ №1:

Работает ли это, когда вы комментируете эту строку:

 System.out.println("Current status: " s.getCurrentStandardOutContents());
  

Возможно, приложение «ожидает» значение, "correct username" но вместо этого видит "Current status: Name: «(вывод из вашей строки «debug»). Я не эксперт по jExpert, но если инструмент просто перенаправляет и отслеживает System.out , он увидит выходные данные скрипта, а также все, что вы печатаете на консоли.

Комментарии:

1. Да, эта строка работает, потому что она печатает выходные данные. Я думаю, с этим нет проблем .. Потому что элемент управления поступает в s.expect(«Password:»); , но он не успешно принимает pwd из скрипта.. Я не понимаю, почему это происходит..

2. Элемент управления не поступает в s.send(«pwd n»);

Ответ №2:

Я понимаю .. 2 последовательных s.expect() инструкции никогда не могут work..So чтобы избавиться от этого, можно было бы добавить n ..

В этом случае

s.expect(«правильное имя пользователя»);
s.expect(«Пароль:»);

обязательно не сработает.Итак, его следует заменить на-

s.expect(«правильное имя пользователя nPassword:»);// Это сработает