#define _GNU_SOURCE
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<sys/types.h>
#define MAX_SIZE 1024
char* path[MAX_SIZE] = { NULL };
// 执行命令
void execute(char* argv[]) {
// 退出shell,此处为并行,不能直接 exit
if (strcmp(argv[0], "exit") == 0) {
fprintf(stderr, "An error has occurred\n");
}
else if (strcmp(argv[0], "cd") == 0) {
// cd 命令,后面刚好有一个参数可跳转,否则为错误
if (argv[1] != NULL && argv[2] == NULL) {
chdir(argv[1]);
}
else {
fprintf(stderr, "An error has occurred\n");
}
}
else if (strcmp(argv[0], "path") == 0) {
// path
for (int i = 0; i < MAX_SIZE; i++) {
path[i] = NULL;
}
int k = 1;
while (argv[k] != NULL) {
path[k - 1] = argv[k];
k++;
}
}
else {
int flag = 0, index = 0;
char tp[MAX_SIZE];
while (path[index]) {
strcpy(tp, path[index]);
strcat(tp, "/");
strcat(tp, argv[0]);
if (access(tp, 0) == 0) {
// 0:检查文件是否存在
flag = 1;
break;
}
index++;
}
if (flag