В настоящее время я пишу собственный сценарий оболочки на C. Чтобы выполнить команду, я использую функцию execvp ().Например:
if((execvp(args[0], args)) == -1) //args is a char **array containing the commands arguments
{
printf("ERROR: Wrong command\n");
exit(EXIT_FAILURE);
}
Дело в том, что когда две команды разделены символом & &, если первая не выполнена (таким образом, execvp вернет -1), весь процесс должен прерваться, прежде чем мы пойдемк следующему.Это работает совершенно нормально, если, например, я напишу "<<strong> какая-то случайная неправильная команда > && ls".
Хотя, если я напишу что-то вроде "ls <<strong> какой-то случайный неверный путь > && ls ", execvp () будет выполнен нормально и напечатает сообщение:
ls: невозможно получить доступ к '...': Нет такого файла или каталога
Тогда он перейдет к следующей команде.По-видимому, в этом случае execvp () не возвращает -1.
Есть ли какое-либо другое значение, которое execvp () возвращает в этом случае?Если нет, как я могу проверить, существует ли путь перед выполнением команды?
РЕДАКТИРОВАТЬ Я просто проверяю значение статуса (генерируется ожиданием (и статусом), пока родитель ожидает ребенкапрекратить).Если он не равен нулю, это означает, что команда не была выполнена.