Можно ли перехватывать управление консолью из программы?
Работаю в Ubuntu. В программе на Си при помощи system("sudo su") я вызываю терминал от админа. Необходимо ввести пароль, но system("password") срабатывает только после того, как я ввожу пароль непосредственно в терминале. Аналогичная ситуация при создании пользователя при помощи утилиты htpasswd. Там требуется дважды ввести пароль для пользователя. Как мне обойти это и полностью управлять терминалом из программы?
Sleep не помог, т.к он также срабатывает после.
Ответы (1 шт):
У программы sudo есть ключ -S. Этот ключ предписывает читать пароль из stdin, а не из консоли.
system("echo PASSWORD | sudo -S su") - вместо PASSWORD подставьте пароль вашего аккаунта.
UPD
Как же не работает? Вот простейшая программа main.c:
#include <stdlib.h>
int main() {
return system("echo MYPASSWORD | sudo -S ls");
}
Вывод:
$ gcc main.c
$ ./a.out
[sudo] password for user: a.out main.c
Запрос пароля был напечатан, но сам пароль не потребовался, его sudo считал из stdin.