Не работает * в ls при запуске через execpv
Пробую запустить команды ls и cp через execpv.
char* argv[]=
{
"/usr/bin/ls",
"-l",
"/home/chorkov/*",
nullptr
};
execvp(*argv,argv);
получаю сообщение об ошибке /usr/bin/ls: cannot access '/home/chorkov/*': No such file or directory. Из командной строки - команда работает. При отсутствии звездочки среду аргументов - тоже работает. Аналогично ведет себя cp (выдает ошибку cp: cannot stat '/home/chorkov/*.csv': No such file or directory, при наличии звездочки вместо конкретного файла). Не могу сообразить куда дальше копать...
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Подстановку * делает bash, не сама программа. Вот так сработает:
char *argv[] = {
"bash",
"-c",
"/usr/bin/ls -l /home/chorkov/*",
nullptr
};
execvp(argv[0], argv);