Link: github.com/edu-bm7/minishell

Colaborando em uma equipe de dois membros, assumi a ambiciosa tarefa de desenvolver um shell Linux na 42 São Paulo. Esse projeto marcou meu primeiro grande desafio em engenharia de software, onde mergulhei nas complexidades do shell Bash. Nosso objetivo era replicar várias funcionalidades do Bash usando a linguagem de programação C, com um prazo de 6 semanas.

As principais funcionalidades implementadas incluíram:

  • Pipe: Permitindo que a saída de um comando sirva como entrada para outro, facilitando sequências de comandos complexas.
  • Operadores Lógicos (AND, OR): Habilitando a execução condicional de comandos com base no sucesso ou falha de comandos anteriores.
  • Redirecionamentos and Heredoc: Redirecionando fluxos de entrada e saída e implementando heredoc para entrada de strings multilinha.
  • Variáveis de Ambiente: Manipulando variáveis que afetam o comportamento do shell e da interface do usuário.
  • Status de Saída: Acompanhando e relatando o status de saída dos comandos para permitir o tratamento de erros.
  • Tratamento de Aspas: Processando com precisão as aspas simples e duplas nas entradas de comandos.
  • Histórico de Comandos: Mantendo um histórico de comandos executados para fácil recuperação e execução.
  • Comandos Internos: Implementando comandos internos essenciais como 'echo', 'env', 'cd', entre outros, para imitar as funcionalidades principais do Bash.

Para gerenciar nossas tarefas de forma eficiente dentro do prazo, empregamos a metodologia Kanban, que aprimorou nossas habilidades de fluxo de trabalho e priorização. Cada semana envolveu desenvolvimento iterativo, testes e refinamento, simulando um ambiente real de desenvolvimento de software.

Além disso, utilizamos extensivamente sistemas de controle de versão para rastrear e gerenciar mudanças no projeto, garantindo um ambiente de codificação sistemático e colaborativo. Essa experiência foi fundamental para aprimorar minhas habilidades técnicas, particularmente em programação de sistemas, e no desenvolvimento de minhas competências em trabalho em equipe e gestão de projetos sob prazos apertados.

minishell image