Embedded Linux Minishell Project

Embedded  Linux Minishell Project

EMbedded Linux Minishell Project

Project Brief

Mini Shell is a Command Line Interface to accept and execute custom commands from the user. The goal of this embedded linux minishell project is to port the application into an ARM based Embedded Target.

About this project

TYPE Individual project
CONTACT training@emertxe.com


Port the mini-shell (msh) which was implemented as part of the Linux Internal module. The objective is to understand and use our application liked as init and understand the system calls w.r.t process creation, signal handling, process synchronization, exit status, text parsing etc..

Requirement Details

Provide a prompt for the user to enter commands

  • Display the default prompt as msh>
  • Prompt should be customizable using environmental variable PS1
  • To change the prompt user will do PS1=NEW_PROMPT
  • Make sure that you do not allow whitespaces between =,
    i.e., do not allow PS1 = NEW_PROMPT
  • In the above case, it should be treated like a normal command

Execute the command entered by the user

  • User will enter a command to execute
  • If it is an external command
    • Create a child process and execute the command
    • Parent should wait for the child to complete
    • Only on completion, msh prompt should be displayed
    • If user entering without a command should show the prompt again

Special Variables:

  • Exit status of the last command (echo $?)
    • After executing a command the exit status should be available
    • echo $? should print the exit status of the last command executed
  • PID of msh (echo $$)
    echo $$: should print msh’s PID
  • Shell name (echo $SHELL)
    echo $SHELL: should print msh executable path

Signal handling

Provide short cuts to send signals to running program

  • Ctrl-C (Send SIGINT), On pressing Ctrl-C
    • If a programming is running in foreground, send SIGINT to the program (child process)
    • If no foreground program exists, re-display the msh prompt ◦ Ctrl+z (Send SIGSTP), On pressing
  • Ctrl+z (Send SIGSTP), On pressing Ctrl+z
    • The program running in foreground, should stop the program and parent will display pid of child

Built-in commands

  • exit – This command will terminate the msh program
  • cd – Change directory
  • pwd – show the current working directory

Background Process / Job control

  • Allow a program to run in background
    • To run a program in background use ampersand (&) after the command. For eg: sleep 50 &
  • Implement fg, bg and jobs commands
    • bg will will move a stopped process to background sleep 10 & is equivalent to sleep 10 then ctrl + z and bg.
      • After this the msh prompt should be displayed indicating it is ready to accept further commands. After a bg process ends, cleanup the process using wait.
      • NOTE: You may have to use SIGCHLD signal handler for this
      • On termination of bg process, display its exit status. User should be able to run any number of background processes.
    • fg will bring a background process to foreground. Only fg bring last background process, or fg will bring given pid to foreground.
    • jobs will print all background process details.

Pipe functionality

  • Allow multiple processes communication by using pipes.
  • Create pipes and childs dynamically as per pipes passed from command-line
    Eg: ls | wc, ls -l /dev | grep tty | wc -l

Skeleton Code

The skeleton code is a very interesting concept used in Emertxe. By looking into the skeleton code, you will get a clear picture of converting the given requirement into a working embedded linux minishell project solution. This will also take care of important aspects like modularity, clean coding practices, reusability, etc. Click on the button given below to download the source code skeleton for Embedded Mini Shell project. 

Sample Output

Here are the sample output expected by the end of project execution.

Fig1: Basic Functions

Embedded Linux minishell Project | Emertxe

Fig2: Shell Functions

Embedded systems course | Bangalore

Fig3: Basic Commands

Embedded systems course | Emertxe | Bangalore

Fig4: Signal Handling

Embedded Linux Minishell Project

Fig5: Background and Foreground control

Embedded systems course | Emertxe

Fig6: Pipe Function

Fig7: Redirection

Embedded Linux Minishell Project