faboussard / 42_minishell

1 stars 0 forks source link

gerer le cas ou il n y a plu de variables denvironnement (apres des unset successifs) #81

Closed faboussard closed 6 months ago

faboussard commented 6 months ago

a levaluation, des etudiant.es lancent minishell env -i ./minishell. dans ce cas jai mis les trois variables denvironnement que met bash par défaut.

cependant ensuite les etudiant.es font unset de ces trois variables.

dans ce cas il faut seulement faire un prompt vide (que ca ne fasse rien) ou bien qu il y ait uniquement la variable "_".

il faut bien placer le

 if (m->list_envp == NULL) 
   return (ou mettre la "variable" _=/usr/bin/env)

je sais pas trop ou le mettre en cas de pipe, cest facile pour toi de le faire ? ^ ^

melobern commented 6 months ago

C'est pas aux pipes de gérer un cas particulier qui est lié à la fonction unset.

Sur Bash, unset ne peut pas unset la variable _ :arrow_right: on empêche unset de le faire dès sa fonction principale :

int ft_unset(t_minishell *minishell, char **args)
{
    int i;
    int ret;

    i = 1;
    while (args[i])
    {
        if (!is_valid_env_var_key(args[i]))
        {
            print_cmd_perror_no_strerror(args[i], "unset: invalid parameter name");
            ret = EXIT_FAILURE;
        }
        else if (ft_strncmp(args[i], "_" , 2) != 0) <============================= ICI !
        {
            if (remove_env_var(&minishell->list_envp, args[i]) == MALLOC_FAILED)
                exit_msg(minishell, "Malloc failed at ft_unset", 2);
        }
        i++;
    }
    return (ret);
}

J'ai aussi géré le cas de PWD autrement qu'en lui mettant /home/faboussa grâce à getcwd. Le seul cas où ça mettrait goinfre/faboussa (on pourrait revoir le chemin donné par le goinfre vu que c'est là qu'il est lancé), c'est si getcwd échoue, et ça afficherait un message d'erreur. Ce cas n'est pas censé arriver puisque getcwd n'est pas censé échouer.