A shell is a command-line interpreter that offers a text-based interface to users. It can be used as a command-line interface in a virtual console (or in a terminal emulator, over a serial connection, etc.), as a remote shell (over SSH, for example), or as a script interpreter (running prewritten commands).
Typically, the shell is the first program started after a user logs in at a terminal. The /etc/passwd file contains information defining the login shell for each user on the system. After login, a user can launch other shells from a terminal, change their login shell, or specify a shell to use under certain terminal emulators.
In Gentoo, the /bin/sh file is a symlink to the default system shell, and as such can link to one of several different POSIX shells. After following the Handbook, the default shell will be bash.
When writing scripts, care should be taken to reference the correct interpreter on the first line, with a shebang. A script beginning with
#!/bin/shshould only use POSIX constructs and no bash specific code, for example.
|bash||app-shells/bash||https://tiswww.case.edu/php/chet/bash/bashtop.html||The Bourne Again Shell, is the default shell on Gentoo. It is used by Portage, Gentoo's default package manager.|
|dash||app-shells/dash||http://gondor.apana.org.au/~herbert/dash/||The Debian Almquist Shell, a small, fast, and posix-compliant shell suited for startup scripts (as /bin/sh replacement).|
|fish||app-shells/fish||https://fishshell.com/||The Friendly Interactive SHell.|
|ksh||app-shells/ksh||http://www.kornshell.com/||The Original Korn Shell, 1993 revision (ksh93).|
|mksh||app-shells/mksh||https://www.mirbsd.org/mksh.htm||An actively developed free implementation of the Korn Shell, and well suited for scripting.|
|tcsh||app-shells/tcsh||http://www.tcsh.org/||an enhanced version of the Berkeley C Shell (csh).|
|xonsh||-||http://xon.sh/||A Python-based shell that falls back to bash commands.|
|yash||app-shells/yash||https://yash.osdn.jp/||Yet Another SHell, is a POSIX-compliant command line shell written in C99 (ISO/IEC 9899:1999).|
|zsh||app-shells/zsh||http://www.zsh.org/||An advanced shell that is the chosen interactive shell for many users.|
For more shell options, see the output of the following command (eix required):
eix -cC app-shells
Changing the default system shell
Changing /bin/sh to something other than bash can cause rare issues with badly written scripts, e.g. scripts starting with
#!/bin/shbut using bash specific code. bug #526268
System administrators can change the default system shell using the eselect utility. This utility changes the system shell by replacing /bin/sh with a symlink to a different POSIX compatible shell.
If it is not already installed, emerge the app-eselect/eselect-sh package:
emerge --ask app-eselect/eselect-sh
To list possible shell options use:
eselect sh list
To set, for example, dash as the default system shell:
eselect sh set dash
Changing a user's shell
Some shells, such as fish, can cause issues if directly set as the login shell. See the fish#Caveats article for workarounds.
A user's default shell (aka login shell) can be changed on an individual basis using the chsh command. To change the login shell for the current user, type chsh and enter a correct path to the new shell. In the example below, a user named Larry the cow (Larry) is changing his login shell from /bin/bash to /bin/zsh:
Changing the login shell for larry Enter the new value, or press ENTER for the default Login Shell [/bin/bash]: /bin/zsh
chsh can be used by the super user account to change the login shell for any user.
The output of a shell can, in some conditions, become corrupt. See the terminal emulator article for instructions to help fix this.
- CLI — a powerful, mature, stable interface to interact with modern computers.
- Login — logging in to a shell, and setting up the default environment.
- Recommended tools — lists system-administration related tools recommended for use in a shell environment (terminal/console)
- Terminal emulator — emulates a video terminal within another display architecture (e.g. in X).