#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:»);// Это сработает