-
Notifications
You must be signed in to change notification settings - Fork 1
Nada aqui é uma verdade
Fazer uma lista encadeada com cada nó contendo uma variável do env
(receber como paramentro na main ou usar o argv ou usar o (extern char **environ)).
Colocar em uma lista encadeada deve facilitar usar o export para inserir uma nova variável ou o unset para remover uma variável.
Fazer uma função que imprima todas as variáveis para quando digitar env no terminal.
Talvez seja necessário converter a lista para uma matriz, não sei ainda.
Fazer uma função para procurar uma variável na lista.
(pode ser usado para imprimir ela quando der um echo + <nome da variável> ou alterar ela)
Fazer uma função para alterar o valor da variável na lista.
I don't know
Alterar o OLDPWD com o diretório atual e depois mudar para o diretório desejado usando chdir()
Pode ser que o diretório desejado não exista, então o OLDPWD não deve ser alterados.
Usar o getcwd(NULL, 0) parece ser o suficiente
Adiciona uma nova variável de ambiente a lista.
Remove um variável de ambiente da lista.
Liberar toda a memoria quando for digitado exit no terminal.
Quando e executado no processo filho só mata o processo filho e o terminal continua rodando.(Não cheguei aqui ainda)
Então esse só funciona quando for digitado solo no terminal
Por enquanto temos a seguinte estrutura
typedef enum e_command
{
PIPE,
BUILTIN,
ARGM,
ENV_VA,
WORD
} t_command;
Não sei como a norminette quer que a estrutura seja declarada.
Percorrer toda a lista colocando no int token; o tipo de entrada que é.
Alguns comandos tem argumentos e começam com -, pode ser que após algum comando, o próximo item da lista seja um argumento para o comando.
Vai ser necessário pegar esse comando e colocar ele para poder executar junto com o argumento se houver.
execve(<caminho completo do programa a ser executado>, <argumentos do programa>, <matriz com as variáveis de ambiente>)