Skip to content

Latest commit

 

History

330 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Minishell - @42

O Minishell é um projeto do currículo comum da escola 42 que consiste na criação de um interpretador de comandos (shell) simplificado em C, semelhante ao Bash. O objetivo principal é compreender o funcionamento interno de um sistema operativo, a criação de processos, manipulação de descritores de ficheiros (redirecionamentos) e comunicação entre processos (pipes).


🚀 Funcionalidades

🔹 Comandos e Execução

  • Execução de Binários: Executa qualquer comando presente no sistema (através da variável de ambiente PATH ou caminhos relativos/absolutos, ex: /bin/ls, ./minishell).
  • Prompt Interativo: Exibe um prompt customizado (TeamWork> ) aguardando entrada do utilizador.
  • Histórico de Comandos: Navegação pelos comandos executados anteriormente usando as setas do teclado (com a biblioteca readline).

🔹 Built-ins (Comandos Internos)

O shell implementa os seguintes comandos internos (built-ins):

  • echo (com a opção -n para não imprimir nova linha).
  • cd (com caminhos relativos ou absolutos).
  • pwd (exibe o diretório atual de trabalho).
  • export (adiciona/atualiza variáveis de ambiente).
  • unset (remove variáveis de ambiente).
  • env (lista as variáveis de ambiente ativas).
  • exit (encerra o shell, aceitando códigos de saída numéricos).

🔹 Redirecionamentos e Pipes

  • Redirecionamento de Entrada (<): Redireciona a entrada padrão para ler a partir de um ficheiro.
  • Redirecionamento de Saída (>): Redireciona a saída padrão para um ficheiro (sobrescrevendo o conteúdo).
  • Redirecionamento de Saída Append (>>): Redireciona a saída padrão para um ficheiro (adicionando ao final).
  • Here-doc (<<): Lê a entrada do utilizador até encontrar uma linha que corresponda exatamente ao delimitador fornecido. Suporta expansão de variáveis.
  • Pipes (|): Encaminha a saída de um comando diretamente para a entrada do comando seguinte (ex: ls -la | grep "src" | wc -l).

🔹 Variáveis e Sinais

  • Expansão de Variáveis: Substitui $NOME_VAR pelo seu respetivo valor nas variáveis de ambiente.
  • Status de Saída ($?): Expande para o código de status de retorno do último comando executado.
  • Gestão de Sinais:
    • Ctrl-C (SIGINT): Cancela o comando atual ou limpa a linha e exibe um novo prompt numa nova linha.
    • Ctrl-D (EOF): Encerra o shell (saída limpa).
    • Ctrl-\ (SIGQUIT): Não faz nada no prompt interativo.

📂 Estrutura do Projeto

  • src/: Ficheiros fonte em C contendo a lógica principal do shell (parser, execução, built-ins, sinais, etc.).
  • include/: Ficheiros de cabeçalho (minishell.h) com as estruturas de dados e protótipos de funções.
  • libft/: Biblioteca utilitária customizada em C, contendo funções auxiliares comuns e implementações adicionais como get_next_line e ft_printf.
  • Makefile: Script de compilação contendo as regras padrão de build.

🛠️ Compilação e Uso

Pré-requisitos

  • Compilador gcc ou cc
  • Ferramenta make
  • Biblioteca readline instalada no sistema (geralmente incluída na maioria das distribuições Linux/macOS, ou instalada via gestor de pacotes, ex: apt-get install libreadline-dev).

Compilar o projeto

Para gerar o executável minishell, execute o comando:

make

Iniciar o Minishell

Para rodar o shell interativo:

./minishell

Limpar ficheiros de compilação

Para remover apenas os ficheiros objeto (.o):

make clean

Para fazer uma limpeza completa (ficheiros objeto, bibliotecas e o executável final):

make fclean

Para recompilar do zero:

make re

👨‍💻 Autores

  • nmatondo (Desenvolvedor principal)
  • NdondaDaniel2020 (Contribuições e ajustes de built-ins, redirecionamentos e estabilização do heredoc)

About

Interpretador de comandos (shell) em C desenvolvido para o currículo da Escola 42, inspirado no Bash. Suporta execução de comandos via PATH, pipes (|), redirecionamentos (<, >, >>, <<), built-ins (cd, echo, pwd, export, unset, env, exit), gestão de variáveis de ambiente e manipulação de sinais (Ctrl+C, Ctrl+D, Ctrl+\).

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages