ExpectIt: проблема с реализацией sudo -i

Я создаю клиент веб-оболочки и успешно создал простой терминал.

введите описание изображения здесь

Я могу выполнять основные команды, но мне нужно сделать sudo -i и передать пароль.

введите описание изображения здесь

После отправки команды "sudo -i" я "ожидаю" приглашения нового пользователя (с правами root), но "ожидать" ждет вечно. Я вижу подсказку, как и ожидалось.

введите описание изображения здесь

Этот код предназначен только для операций sudo и работает нормально. Общие команды сделаны в отдельном методе.

expect.sendLine( "sudo -i" );
expect.expect( Matchers.contains( ":" ) );
expect.sendLine( password );

// Old prompt was user prompt :  user + "@"
// Now I need the root prompt :  user + ":"
PROMPT = user + ":";

Общие команды (метод run( String command)): Это будет блокироваться только при ожидаемом.expect (), ЕСЛИ Я ДЕЛАЮ SUDO (если я попробую это ПЕРЕД sudo, все тоже будет работать нормально)...

expect.sendLine( command );
String result = expect.expect( Matchers.contains( PROMPT ) ).getInput();

Ошибка (ожидание приглашения sudo):

net.sf.expectit.ExpectIOException: Expect operation fails (timeout: 30000 ms) for matcher: contains('sadlog:')

1 ответ

expect.sendLine( command );
String result = expect.expect( Matchers.contains(":")).getInput();
int pos = result.indexOf(PROMPT);

if (pos > -1) {
    // SUCCESS
} else {
    // FAILURE
}
Другие вопросы по тегам