Shell management
The default shell used by Alpine Linux is the BusyBox variant of the ash shell. This page explains how to use the default shell and various ways to change the default shell in Alpine Linux.
Ash shell
Alpine Linux uses Busybox Ash shell for its default shell. It is a standard POSIX shell derived from Debian Ash variant.
One's ~/.bashrc file (or, alternatively, a different shell alias file) could be considered as a basis, say, for an ~/.ashrc file, reviewing it carefully for syntax/cli variants against that of Ash shell. For non-login, interactive shells refer to Setting alias section.
Setting alias
For non-login shells, Busybox Ash and other POSIX shells do NOT automatically read a startup file like ~/.ashrc. To ensure that both login and non-login shells work consistently, use ENV environment variable in ~/.profile to refer ~/.ashrc file.
- Edit the ~/.profile as follows:
Contents of ~/.profile
... export ENV="$HOME/.ashrc" - Now aliases can be added in the startup file ~/.ashrc as follows:
Contents of ~/.ashrc
# ~/.ashrc: interactive shell configuration for BusyBox Ash # Custom Aliases alias ls='ls --color=auto' alias grep='grep --color=auto' # You may want to put all your additions into a separate file like # ~/.ash_aliases, instead of adding them here directly. if [ -f ~/.ash_aliases ]; then . ~/.ash_aliases fi
Available shells
Most of the popular shells are available in Alpine Linux repositories as can be seen from the below list.
Name | URL | Remarks |
bash | https://www.gnu.org/software/bash/bash.html | The GNU Bourne Again shell |
zsh | https://www.zsh.org/ | Very advanced and programmable command interpreter |
fish | https://fishshell.com/ | Modern interactive commandline shell |
dash | http://gondor.apana.org.au/~herbert/dash/ | Small and fast POSIX-compliant shell |
oksh | https://github.com/ibara/oksh | Portable OpenBSD ksh, based on pdksh |
loksh | https://github.com/dimkr/loksh | A Linux port of OpenBSD's ksh |
yash | https://magicant.github.io/yash | Yet another shell |
tcsh | https://github.com/tcsh-org/tcsh | extended C-shell |
nsh | https://github.com/nuta/nsh | A command-line shell like fish, but POSIX compatible |
elvish | https://elv.sh | Friendly and expressive Unix shell |
nushell | https://www.nushell.sh | A new type of shell |
murex | https://murex.rocks/ | Intuitive, typed and content aware shell |
To install any of the above shells, say for eg: bash shell:
# apk add bash bash-completion
Change default shell
There are various ways to change the default shell in Alpine Linux. You can revert back to ash shell at anytime with the same steps.
By hand
Edit /etc/passwd manually using an editor of your choice. An example line for a user named user
is:
Contents of /etc/passwd
Change /bin/ash to point to the path of a shell from /etc/shells. Take care to not delete/mangle the line, as it would make you unable to log in again. The user
should be the user you are changing the default login shell for.
Using chsh command
To use chsh
command, install the shadow package:
# apk add shadow
And use chsh:
# chsh username
Now enter the path for the shell you want to use (e.g /bin/zsh) and press Enter to confirm this change. The shell should exist in /etc/shells.