top of page
Search

Understanding the $SHELL Environment Variable in Unix and Linux

  • Writer: Chris
    Chris
  • Jun 3
  • 1 min read


In Unix and Linux systems, the $SHELL environment variable indicates the parent shell that initiated your current session.


This can be useful for understanding the runtime environment, particularly when troubleshooting or scripting.


It’s important to know that this value doesn’t always reflect your default login shell—it shows the shell that started your current session.


For example, if you start a new shell within your login shell, $SHELL still shows the original one.


Here’s a practical demonstration:


$ whoami 

chris 

$ echo $SHELL 

/bin/bash 

$ zsh

echo $SHELL 

/bin/bash

In this case, even after switching to zsh, the value of $SHELL remains /bin/bash. This is because it reflects the shell that started the session, not the current interactive shell.


Understanding Default Shells


  • The system-wide default shell is usually defined in /etc/default/useradd.

  • Each user’s default shell is listed in /etc/passwd.


To check or change the default shell for a user:


Check:

$ grep chris /etc/passwd

Change using chsh:

$ chsh -s /bin/ksh chris

Or using usermod (requires root):

# usermod -s /bin/ksh chris

These commands allow users or administrators to specify which shell environment they prefer, which is essential for scripting, user experience, and system customization.


Comments


bottom of page