int exec_shell(char **env) { int ret; char buf[BUF_SIZE]; char *cmd; char **list_cmd; int i; i = 0; prompt(env); ret = read(0, buf, BUF_SIZE); if (ret == 0 || buf[0] == '\n') return (0); cmd = (char*)malloc(sizeof(cmd) * (ret + 1)); if (cmd) ft_strncpy(cmd, buf, ret - 1); while (ft_syntaxchecked(cmd) && !verif_cmd(cmd)) cmd = get_new_cmd(cmd); list_cmd = ft_strsplit(ft_replacetab(cmd), ';'); while (list_cmd[i] != NULL && ft_checksymbolcmd(cmd)) { choose_cmd(list_cmd[i]); i++; } free(cmd); ft_freetable(list_cmd); return (1); }
void ft_exeinenv(char **arg, char **env) { int i; int find; char **paths; char *path; i = -1; find = 0; while (env[++i] != NULL && find == 0) { if (ft_iskey(env[i], "PATH") == EXIT_SUCCESS) { path = env[i]+ 5; find = 1; } } i = -1; paths = ft_strsplit(path, ':'); while (paths[++i] != NULL) { path = ft_topath(arg[0], paths[i]); execve(path, arg, env); if (path) free(path); } ft_freetable(paths); }
void ft_execmd(char const *cmd) { pid_t pid; char **arg; arg = ft_strsplit(cmd, ' '); if (check_cmd(arg)) { pid = fork(); if (pid == 0) { ft_exeinenv(arg); RED; ft_putstr_fd("ft_minishell2: ", 2); ft_putstr_fd(arg[0], 2); ft_putendl_fd(": command not found", 2); CANCEL; _exit(1); } else if (pid < 0) ft_putendl_fd("Fork Error", 2); else { waitpid(pid, 0, 0); ft_freetable(arg); } } }
void ft_endterm(struct termios term) { if (hist->histo) ft_freetable(hist->histo); term.c_lflag |= ICANON; term.c_lflag |= ECHO; tcsetattr(0, 0, &term); }