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
}