Я пытаюсь запустить несколько команд (или с помощью простого перенаправления вывода) через execve().неожиданный EOF при поиске соответствия `'' при использовании execve()
Когда я кладу это (конечно, прежде чем я передать эту строку, чтобы функционировать я разделить на пробелы и положить каждый каждый отдельный обугливаться * []):
"bash -c ' /usr/bin/cat /root/script.sh > /root/script1.sh ' "
в execve() функцию, Я получил сообщение об ошибке:
/usr/bin/cat: -c: line 0: unexpected EOF while looking for matching `''
/usr/bin/cat: -c: line 1: syntax error: unexpected end of file
Это мое предложение запустить несколько команд Linux (приложения, расположенные в PATH), используя функцию точно execve() (из соображений безопасности)
Но это решение не работает, как я ожидаю.
Любая идея исправить мое решение? Может быть, я могу использовать execve() иначе, но я не знаю, как ..
EDIT: Добавлено упрощена (извините, я не могу вставить в оригинальной форме, из-за компании ограничения) исходного кода:
int foo(const char *cmdline)
{
char d[] = "bash -c ' /usr/bin/cat /root/script.sh > /root/script1.sh ' ";
args = strtok(d, " ");
counter = 0;
while (args != NULL)
{
cmdline_args[counter++] = args;
args = strtok(NULL, " ");
}
cmdline_args[counter] = '\0';
switch (pid = fork()) {
case -1:
ret = -1;
case 0: // for execve
status = execve(cmdline_args[0], cmdline_args, env);
exit(status);
default: // for parent pid
if (waitpid(pid, &status, 0) < 0) {
// in case when waitpid failed
}
}
return ret;
}
Сообщение об ошибке говорит вам, имеют непревзойденную цитату где-то в строках, которые вы передаете 'execve()'. Проверяет строки, а также размещает соответствующий код. –
показать свой код на C, проще помочь, когда его показать – developer
Я добавил код. Я полагаю, что это достаточно хорошо, чтобы понять значение функции. @BlueMoon Я так думаю, но я не знаю, где ошибка. – maslokarol