Можно ли перехватывать управление консолью из программы?

Рейтинг: 1Ответов: 1Опубликовано: 05.03.2023

Работаю в Ubuntu. В программе на Си при помощи system("sudo su") я вызываю терминал от админа. Необходимо ввести пароль, но system("password") срабатывает только после того, как я ввожу пароль непосредственно в терминале. Аналогичная ситуация при создании пользователя при помощи утилиты htpasswd. Там требуется дважды ввести пароль для пользователя. Как мне обойти это и полностью управлять терминалом из программы?

Sleep не помог, т.к он также срабатывает после.

Ответы

▲ 2

У программы 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.