Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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);
		}
	}
}
Пример #4
0
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);
}