Получение `execve не удалось: нет такого файла или каталога` при вызове` boost :: process :: system () `с отдельными аргументами - PullRequest
0 голосов
/ 24 октября 2019

Если я вызываю его целыми жестко закодированными командами, он работает, но когда я разделяю аргументы, он выдает:

execve fail: Нет такого файла или каталога

Выполнение примера здесь :

bp::system("grep -c false /etc/passwd"); // ok
bp::system("grep", "-c", "false", "/etc/passwd"); // fails

bp::system(cmd="grep -c false /etc/passwd"); // ok
bp::system(exe="grep", args={"-c", "false", "/etc/passwd"}); // fails

1 Ответ

1 голос
/ 24 октября 2019

Очевидно, он не проверяет PATH при использовании exe-args style:

Если это одна строка (или явная форма bp :: cmd), она будет интерпретироваться как командалиния. Это заставит функцию выполнения искать переменную PATH, чтобы найти исполняемый файл. Альтернативой является стиль exe-args, где первая строка будет интерпретироваться как имя файла (включая путь), а остальные - как аргументы, передаваемые в указанную функцию.

Работает с full path:

bp::system("/bin/grep", "-c", "false", "/etc/passwd");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...