示例#1
0
void			m_cd(t_var *v)
{
	v->cd_path = NULL;
	v->cd_home = m_getenv("HOME", v);
	v->cd_old = m_getenv("OLDPWD", v);
	v->cd_pwd = m_getenv("PWD", v);
	m_setenv("OLDPWD", v->cd_pwd, 1, v);
	if (v->args[1] != NULL)
	{
		v->cd_path = get_path(v->args[1]);
		if (v->args[1][0] == '~')
			chdir(ft_strcat(v->cd_home, v->cd_path));
		else if (v->args[1][0] == '-')
			chdir(v->cd_old);
		else
			chdir(v->cd_path);
	}
	else
		chdir(v->cd_home);
	m_setenv("PWD", getcwd(v->cwd, sizeof(v->cwd)), 1, v);
	free(v->cd_path);
	free(v->cd_home);
	free(v->cd_old);
	free(v->cd_pwd);
}
示例#2
0
int		slave(t_script *args, int fd_slave, int fd_master)
{
	char *tab[3];

	tab[0] = NULL;
	tab[1] = "-i";
	tab[2] = NULL;
	(void)fd_master;
	dup2(fd_slave, 0);
	dup2(fd_slave, 1);
	dup2(fd_slave, 2);
	close(fd_slave);
	setsid();
	ioctl(0, TIOCSCTTY, 1);
	if (args->command == NULL || !args->command[0])
	{
		if ((tab[0] = m_getenv("SHELL", args->env)) == NULL)
			tab[0] = DSHELL;
		return (ft_print_err(ft_getexec(tab, args->env), tab[0]));
	}
	else
		return (ft_print_err(ft_getexec(args->command, args->env),
			args->command[0]));
}
示例#3
0
char	*ft_getpath(char *cmd, char **env)
{
	char			*path;
	static char		str[256];
	int				i;
	int				j;

	i = 0;
	j = 0;
	path = m_getenv("PATH", env);
	while (path && path[i])
	{
		if (path[i++] == ':')
		{
			path[i - 1] = '\0';
			ft_bzero(&str, 256);
			ft_strcat(ft_strcat(ft_strcat(str, path + j), "/"), cmd);
			if (access(str, X_OK) >= 0)
				return (path = str);
			j = i;
		}
	}
	return (NULL);
}