Подтвердить что ты не робот

Как запустить bash script из программы на С++

Bash скрипты очень полезны и могут сэкономить много времени программирования. Итак, как вы начинаете bash script в С++-программе? Кроме того, если вы знаете, как заставить пользователя стать суперпользователем, это было бы неплохо. Спасибо!

4b9b3361

Ответ 1

Используйте функцию system.

system("myfile.sh"); // myfile.sh should be chmod +x

Ответ 2

#include <stdio.h>
#include <stdlib.h>

// ....


system("my_bash_script.sh");

Ответ 3

Единственным стандартным мандатом, зависящим от реализации, является использование функции system() от stdlib.h.

Также, если вы знаете, как заставить пользователя стать суперпользователем, это тоже было бы неплохо.

Вы хотите, чтобы script выполнялся как суперпользователь или вы хотите повысить привилегии исполняемого файла C? Первое можно сделать с помощью sudo, но вам нужно знать несколько вещей, прежде чем вы сможете отключиться, используя sudo.

Ответ 4

fooobar.com/questions/21128/...

fooobar.com/questions/21128/...

Также, если вы знаете, как заставить пользователя стать суперпользователем, что было бы неплохо. Спасибо!

Суд. су. chmod 04500. (setuid() и seteuid(), но они требуют, чтобы вы уже были root. E..g. chmod'ed 04 ***.)

Позаботьтесь. Они могут открыть "интересные" дыры в безопасности...

В зависимости от того, что вы делаете, вам может не понадобиться root. (Например: я часто использую chmod/chown/dev устройства (последовательные порты и т.д.) (Под root sudo), поэтому я могу использовать их из своего программного обеспечения без root. С другой стороны, это не работает так хорошо, загрузка/выгрузка модулей ядра...)

Ответ 5

Так как это довольно старый вопрос, и этот метод не был добавлен (кроме функции вызова system()), я думаю, было бы полезно включить создание оболочки script с самим бином C. Код оболочки будет размещен внутри исходного файла file.c. Вот пример кода:

#include <stdio.h>
#include <stdlib.h>

#define SHELLSCRIPT "\
#/bin/bash \n\
echo -e \"\" \n\
echo -e \"This is a test shell script inside C code!!\" \n\
read -p \"press <enter> to continue\" \n\
clear\
"

int main() {

system(SHELLSCRIPT);
return 0;
}

В принципе, в двух словах (каламбур) мы определяем имя script, выделяя script, заключая их в двойные кавычки (при вставке правильных экранов для игнорирования двойных кавычек в коде оболочки) и затем вызывает это имя script, которое в этом примере SHELLSCRIPT использует функцию system() в main().