Este projeto foi criado como parte do currículo da 42 por victde-s e jode-cas.
"As beautiful as a shell" Um clone simplificado do Bash desenvolvido em C para entender os meandros de processos, pipes, sinais e redirecionamentos no Unix.
O Minishell é o primeiro grande desafio em dupla do currículo da 42. O objetivo é recriar o funcionamento básico de um interpretador de comandos, lidando com a complexidade de gerenciar processos filhos, manipular descritores de arquivos e garantir a limpeza total de memória (zero leaks).
- Linguagem C (Seguindo a Norma da 42)
- Processos:
fork,wait,waitpid,execve - Pipes e Redirecionamentos:
pipe,dup,dup2 - Sinais:
sigaction,signal - Gerenciamento de Memória: Alocação dinâmica e limpeza de estruturas complexas.
- Prompt funcional: Exibe um prompt à espera de comandos.
- Histórico: Navegação entre comandos anteriores (setas para cima/baixo).
- Execução de Binários: Busca comandos no
PATHou caminhos relativos/absolutos. - Aspas (Quotes): -
' '(Aspas simples): Inibe interpretação de metacaracteres." "(Aspas duplas): Inibe quase tudo, exceto o símbolo$.
- Redirecionamentos:
<redireciona entrada.>redireciona saída (overwrite).<<heredoc (lê entrada até o delimitador).>>redireciona saída (append).
- Pipes (
|): Onde a saída de um comando vira a entrada do próximo. - Variáveis de Ambiente: Expansão de
$VARe do status de saída$?. - Sinais:
Ctrl-C: Exibe um novo prompt em uma linha vazia.Ctrl-D: Sai do shell (EOF).Ctrl-\: Não executa nenhuma ação (SIGQUIT ignorado).
O shell executa os seguintes comandos sem depender de binários externos:
echo(com opção-n)cd(apenas com caminhos relativos ou absolutos)pwdexportunsetenvexit
O Minishell foi estruturado em 4 etapas principais:
- Lexer: Divide a entrada do usuário em "tokens" (palavras, pipes, operadores).
- Parser: Organiza os tokens em estruturas de comandos, identificando redirecionamentos e argumentos.
- Expander: Substitui variáveis de ambiente e trata as aspas.
- Executor: Gerencia os
forks, cria ospipese executa os comandos viaexecveou built-ins.
Dependência: O projeto utiliza a biblioteca readline. Certifique-se de tê-la instalada em seu sistema.
# Clone o repositório
git clone [email protected]:Cadavanaugh/42-Project-Minishell.git minishell
# Entre na pasta
cd minishell
# Compile o projeto
make
# Execute o shell
./minishell
## 🧪 Testes
-------------------------------------------------------------------------------------------------------------
## 📚 Recursos
Acompanhe a versão completa pelo notion: https://www.notion.so/Minishell-2fc1a6c6214c811aab29c9ce6abb0c3e