LinuxLingo is a command-line application for learning Linux commands through an interactive shell simulator and a built-in quiz system. It is built for Computer Science students who want to build confidence with the Linux command line within a safe, in-memory virtual file system that never touches real files. My contributions centred on the core shell infrastructure: the input parsing pipeline, the command execution engine, and the alias and history management system that together make the simulator feel like a real shell.
Code contributed: RepoSense Dashboard
ShellParser): Implemented the full parsing pipeline that transforms raw user input into structured execution plans across three layers: a character-by-character tokenizer (handling quotes, backslash escaping, and all shell operators |, ||, >, >>, <, &&, ;); a segment builder that groups tokens into command segments with redirect info; and an execution plan constructor producing a ParsedPlan.alias, unalias): alias supports listing all aliases, defining new ones (alias NAME=VALUE with surrounding quotes stripped), and inspecting a specific alias. unalias removes aliases by name or clears all with -a. Alias resolution is integrated into the execution engine with circular alias detection.history): Records all commands entered in the session, including failed ones. Supports history N and history -c to clear.ShellSession (blank-line skipping, exit handling, command dispatch); added || operator support and input redirection (<) to the execution engine; fixed a bug where empty argument lists were passed to cd and ls; improved HelpCommand output formatting.Preconditions (requireNonNull, requireNonBlank) eliminates repeated null checks across ShellParser, Token, Segment, and ParsedPlan. ExitCodes centralises exit codes (1, 2, 127), preventing magic numbers from being scattered across the codebase.Testing and Code Quality
ShellSession, ShellParser, AliasCommand, UnaliasCommand, and HistoryCommand, covering edge cases.flushCurrentToken(), buildSegment(), shouldSkipSegment(), and precedingOperatorIsNotPipe().linuxlingo.shell, including methods written by teammates within the same package.Contributions to the User Guide
unalias usage) and the History Command section (all flags, note on failed commands and self-recording). Added screenshots for all three commands.Contributions to the Developer Guide
echo hello | grep h > output.txt).ShellSession documentation and added 4 UML diagrams: ParsingPipelineActivity.puml (activity), ShellParserSequence.puml (sequence), ParsedPlanClassDiagram.puml (class), RunPlanSequence.puml (sequence).Contributions to Team-Based Tasks
gradle.properties to suppress noisy execution progress output.Contributions Beyond the Project Team