Я пытаюсь реализовать базовую оболочку в c. Но я столкнулся с проблемой, когда я печатаю содержимое массива char, и он выводит только первую команду того, что я набираю. Так, например, если бы я набрал «ls -l», он бы распечатал только «ls». Однако это смущает меня с тех пор, как я набираю ls -l, когда я запускаю оболочку, он выполняет правильную команду и показывает разрешения для каждого файла. Теперь, когда я делаю «rm -f/path/to/file», он не удаляет его. Также, если я делаю «cd/path», он действует так, как будто он не видит второй аргумент (путь). Я не могу понять, что происходит. Любое понимание?ошибки в реализации оболочки в C
while (1) {
/* Print the command prompt */
printf("prompt> ");
fgets(input, 1024, stdin);
// get first token
args[i++] = strtok(input, " \n");
while((args[i++] = strtok(NULL, " \n")) != NULL);
args[i] = NULL;
printf("%s\n", *args);
if(strcmp(*args, "exit") == 0)
exit(1);
else{
int pid = fork();
if(pid == 0){
execvp(args[0], args);
else waitpid(pid, NULL, 0);
}
return 0;
}
Это задание или вы пытаетесь построить настоящую оболочку? Во втором случае вы должны действительно узнать о генераторах синтаксического анализатора и избегать парсинга с ручным кодированием, если у вас нет веских оснований для этого. Это болезненная и подверженная ошибкам задача, как показывают недавние эпизоды. –
Почему вы ожидаете одного вызова 'printf ("% s \ n ", * args)' для печати нескольких строк? –
, вероятно, 'algol 68' более популярен, чем' C', когда речь идет о оболочках и средах командной строки в целом, 'C' не так популярен среди этого семейства программного обеспечения. Реализация полезной, а не тривиальной оболочки, должна быть долгой болезненной задачей для очень небольшого выигрыша. – user2485710