Shell management: Difference between revisions

From Alpine Linux
(removed checkbashisms heading and moved it as Tip)
(reworded sentence to add clarity)
Line 7: Line 7:
One's ~/.bashrc file (or, alternatively, a different shell alias file) could be considered as a basis, say, for an {{Path|~/.ashrc}} or {{Path|~/.config/ash/ashrc}} file, reviewing it carefully for syntax/cli variants against that of Ash shell.  
One's ~/.bashrc file (or, alternatively, a different shell alias file) could be considered as a basis, say, for an {{Path|~/.ashrc}} or {{Path|~/.config/ash/ashrc}} file, reviewing it carefully for syntax/cli variants against that of Ash shell.  


{{Tip| Use {{pkg|checkbashisms}} script to perform basic checks for the presence of bashisms in scripts and help remove them.}}
{{Tip|Use {{pkg|checkbashisms}} script to perform basic checks for the presence of bashisms in scripts and help remove them.}}
 
If aliases are required only for login shells(tty), no additional steps are involved. For non login, interactive shells refer to [[#Setting alias|Setting alias]] section.


=== Setting alias ===
=== Setting alias ===


When using Ash shell, one can’t set aliases directly in the {{Path|~/.profile}} file. One can set '''ENV''' environment variable in {{Path|~/.profile}} file to refer aliases file. This method works for both login and non login shells, but '''ENV''' is sourced, only if the shell is interactive. The following steps does not affect existing {{Path|~/.profile}} and uses {{path|~/.config/ash/profile}} file :
When using Ash shell, in order to use aliases for both login and non login shells, use '''ENV''' environment variable to refer the aliases file. This works as long as the shell is interactive.  


# First create the file {{Path|/etc/profile.d/profile.sh}} as follows: {{Cat|/etc/profile.d/profile.sh|if [ -f "$HOME/.config/ash/profile" ]; then
# First create the file {{Path|/etc/profile.d/profile.sh}} as follows: {{Cat|/etc/profile.d/profile.sh|if [ -f "$HOME/.config/ash/profile" ]; then
Line 20: Line 22:
}}
}}
# Now aliases can be added in the file {{Path|~/.config/ash/ashrc}}: {{Cat|~/.config/ash/ashrc|<nowiki>alias a=alias
# Now aliases can be added in the file {{Path|~/.config/ash/ashrc}}: {{Cat|~/.config/ash/ashrc|<nowiki>alias a=alias
alias c=clear
alias l='ls -lh'</nowiki>
alias l='ls -lh'</nowiki>
}}
}}
The following approach uses {{Path|~/.profile}} and works only for login shells:
# Edit the {{Path|~/.profile}} as follows:{{Cat|~/.profile|# Alias
if [ -f ~/.ash_aliases ]; then
    . ~/.ash_aliases
fi}}
# Edit {{Path|~/.ash_aliases}} file as follows:{{Cat|~/.ash_aliases|<nowiki>alias a=alias
alias c=clear
alias f=file
alias g=grep
alias l='ls -lh'</nowiki>}}


== Available shells ==
== Available shells ==

Revision as of 09:04, 21 July 2025

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 or ~/.config/ash/ashrc file, reviewing it carefully for syntax/cli variants against that of Ash shell.

Tip: Use checkbashisms script to perform basic checks for the presence of bashisms in scripts and help remove them.

If aliases are required only for login shells(tty), no additional steps are involved. For non login, interactive shells refer to Setting alias section.

Setting alias

When using Ash shell, in order to use aliases for both login and non login shells, use ENV environment variable to refer the aliases file. This works as long as the shell is interactive.

  1. First create the file /etc/profile.d/profile.sh as follows:

    Contents of /etc/profile.d/profile.sh

    if [ -f "$HOME/.config/ash/profile" ]; then . "$HOME/.config/ash/profile" fi
  2. Next create the file ~/.config/ash/profile as follows:

    Contents of ~/.config/ash/profile

    export ENV="$HOME/.config/ash/ashrc"
  3. Now aliases can be added in the file ~/.config/ash/ashrc:

    Contents of ~/.config/ash/ashrc

    alias a=alias alias c=clear alias l='ls -lh'

Available shells

All popular shells are available in Alpine Linux. Refer to the following list:

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.

Note: After performing the below step, you need to log out and login again for these changes to take effect.

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

... user:x:1000:1000:user:/home/user:/bin/ash ...

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.

See also