The shell is a command line interpreter in Linux. It’s a program that receives commands from the user and gives them to the operating system to execute. Further, bash is the default login shell for most Linux distributions, but there are other Linux shells like the Korn shell (ksh), the Z shell (zsh), and the C shell (csh).
In this tutorial, we’ll learn the difference between interactive, non-interactive, login, and non-login shells.
2. Interactive Login Shell
An interactive shell receives commands from the user and displays output to the user. Moreover, users get a login shell when they login to their account.
$ ssh localhost $ echo $- himBHs $ shopt login_shell login_shell on
In the above snippet:
- $- is a special bash parameter that returns the option flags used in the current bash shell. Further, if it includes i, it means that the shell is interactive
- shopt login_shell tells us if the login_shell shell option is set
Thus, we have an interactive login shell.
3. Interactive Non-login Shell
We get an interactive non-login shell when we open up a terminal on our Linux machine:
$ echo $- himBHs $ shopt login_shell login_shell off
We can see that we got an interactive, non-login shell.
4. Non-interactive Login Shell
If we give something other than tty (for example, a command) as stdin to ssh, we receive a non-interactive login shell:
$ echo 'echo $-; shopt login_shell' | ssh localhost Pseudo-terminal will not be allocated because stdin is not a terminal. hBs login_shell on
In the above snippet, we passed ‘echo $-; shopt login_shell’ as stdin to ssh. As a result, we got a non-interactive login shell.
5. Non-interactive Non-login Shell
Finally, we get a non-interactive non-login shell when we run a script on our machine. That is because they run in their new shell that is non-interactive:
$ echo 'echo $-; shopt login_shell' > script.sh $ chmod +x script.sh $ ./script.sh hBH login_shell off
To clarify, we wrote ‘echo $-; shopt login_shell’ into script.sh and then made it executable using chmod. After that, we ran the script.
As we can see, we got a non-interactive non-login shell.
In this article, we learned about the different kinds of shells we can get in the Linux environment.