Skip to content

Nada aqui é uma verdade

Erick Ramos edited this page Jun 4, 2024 · 3 revisions

ENV

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.

ECHO

I don't know

CD

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.

PWD

Usar o getcwd(NULL, 0) parece ser o suficiente

EXPORT

Adiciona uma nova variável de ambiente a lista.

UNSET

Remove um variável de ambiente da lista.

EXIT

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

ANÁLISE DO INPUT

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>)

Clone this wiki locally