7. Shells
We are all familiar with the Bourne Again SHell, but there are two other user interfaces that are considered useful modern shells β the Berkeley Unix C shell and the Korn shell. This chapter installs packages compatible with these additional shell types.
7.1 Dash-0.5.12
Introduction to Dash
Dash is a POSIX compliant shell. It can be installed as /bin/sh or as the default shell for either root or a second user with a userid of 0. It depends on fewer libraries than the Bash shell and is therefore less likely to be affected by an upgrade problem or disk failure. Dash is also useful for checking that a script is completely compatible with POSIX syntax.
This package is known to build and work properly using an LFS 11.3 platform.
Package Information
-
Download (HTTP): http://gondor.apana.org.au/~herbert/dash/files/dash-0.5.12.tar.gz
-
Download MD5 sum: 57222b768b84003ea4b801e5d5e0e52b
-
Download size: 244 KB
-
Estimated disk space required: 2.9 MB
-
Estimated build time: less than 0.1 SBU
Dash Dependencies
Optional
libedit (command line editor library)
User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dash
Installation of Dash
Install Dash by running the following commands:
./configure --bindir=/bin --mandir=/usr/share/man &&
make
This package does not come with a test suite.
Now, as the root user:
make install
If you would like to make dash the default sh, recreate the /bin/sh symlink as the root user:
Note
If you create the symbolic link from dash to sh, you will need to reset the link to bash to build LFS.
ln -svf dash /bin/sh
Command Explanations
--bindir=/bin: This parameter places the dash binary into the root filesystem.
--with-libedit: To compile Dash with libedit support.
Configuring Dash
###
Config Files
Dash sources /etc/profile and ~/.profile
Configuration Information
Update /etc/shells to include the Dash shell by issuing the following command as the root user:
cat >> /etc/shells << "EOF"
/bin/dash
EOF
Contents
Installed Program: dash
Installed Libraries: None
Installed Directories: None
Short Description
dash is a POSIX compliant shell.
7.2 Tcsh-6.24.07
Introduction to Tcsh
The Tcsh package contains βan enhanced but completely compatible version of the Berkeley Unix C shell (csh)β. This is useful as an alternative shell for those who prefer C syntax to that of the bash shell, and also because some programs require the C shell in order to perform installation tasks.
This package is known to build and work properly using an LFS 11.3 platform.
Package Information
-
Download (HTTP): https://astron.com/pub/tcsh/tcsh-6.24.07.tar.gz
-
Download (FTP): ftp://ftp.astron.com/pub/tcsh/tcsh-6.24.07.tar.gz
-
Download MD5 sum: 5a0dfa0874f2dee24e0b36b3ed41d3a2
-
Download size: 928 KB
-
Estimated disk space required: 11 MB (with tests)
-
Estimated build time: 0.2 SBU (with tests)
User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tcsh
Installation of Tcsh
Install Tcsh by running the following commands:
./configure --prefix=/usr &&
make
To test the results, issue: make check.
Now, as the root user:
make install install.man &&
ln -v -sf tcsh /bin/csh &&
ln -v -sf tcsh.1 /usr/share/man/man1/csh.1
Command Explanations
ln -v -sf tcsh /bin/csh: The FHS states that if there is a C shell installed, there should be a symlink from /bin/csh to it. This creates that symlink.
Configuring Tcsh
###
Config Files
There are numerous configuration files for the C shell. Examples of these are /etc/csh.cshrc, /etc/csh.login, /etc/csh.logout, ~/.tcshrc, ~/.cshrc, ~/.history, ~/.cshdirs, ~/.login, and ~/.logout. More information on these files can be found in the tcsh(1) man page.
Configuration Information
Update /etc/shells to include the C shell program names (as the root user):
cat >> /etc/shells << "EOF"
/bin/tcsh
/bin/csh
EOF
The following ~/.cshrc provides two alternative colour prompts and coloured ls output. If you prefer a global modification, issue the command as the root user, replacing ~/.cshrc by /etc/csh.cshrc.
cat > ~/.cshrc << "EOF"
# Original at:
# https://www.cs.umd.edu/~srhuang/teaching/code_snippets/prompt_color.tcsh.html
# Modified by the BLFS Development Team.
# Add these lines to your ~/.cshrc (or to /etc/csh.cshrc).
# Colors!
set red="%{\033[1;31m%}"
set green="%{\033[0;32m%}"
set yellow="%{\033[1;33m%}"
set blue="%{\033[1;34m%}"
set magenta="%{\033[1;35m%}"
set cyan="%{\033[1;36m%}"
set white="%{\033[0;37m%}"
set end="%{\033[0m%}" # This is needed at the end...
# Setting the actual prompt. Two separate versions for you to try, pick
# whichever one you like better, and change the colors as you want.
# Just don't mess with the ${end} guy in either line... Comment out or
# delete the prompt you don't use.
set prompt="${green}%n${blue}@%m ${white}%~ ${green}%%${end} "
set prompt="[${green}%n${blue}@%m ${white}%~ ]${end} "
# This was not in the original URL above
# Provides coloured ls
alias ls ls --color=always
# Clean up after ourselves...
unset red green yellow blue magenta cyan yellow white end
EOF
Contents
Installed Program: tcsh
Installed Libraries: None
Installed Directory: None
Short Descriptions
tcsh is an enhanced but completely compatible version of the Berkeley Unix C shell, csh. It is usable as both an interactive shell and a script processor.
7.3 zsh-5.9
Introduction to zsh
The zsh package contains a command interpreter (shell) usable as an interactive login shell and as a shell script command processor. Of the standard shells, zsh most closely resembles ksh but includes many enhancements.
This package is known to build and work properly using an LFS 11.3 platform.
Package Information
-
Download (HTTP): https://www.zsh.org/pub/zsh-5.9.tar.xz
-
Download MD5 sum: 182e37ca3fe3fa6a44f69ad462c5c30e
-
Download size: 3.2 MB
-
Estimated disk space required: 48 MB (includes documentation and tests)
-
Estimated build time: 1.6 SBU (Using parallelism=4; includes documentation and tests)
Additional Downloads
-
Optional Documentation: https://www.zsh.org/pub/zsh-5.9-doc.tar.xz
-
Documentation MD5 sum: 8db53446f613521fb4f9b0bd9f6adda1
-
Documentation download size: 3.0 MB
Note
When there is a new zsh release, the old files shown above are moved to a new server directory: https://www.zsh.org/pub/old/.
zsh Dependencies
Optional
User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/zsh
Installation of zsh
If you downloaded the optional documentation, unpack it with the following command:
tar --strip-components=1 -xvf ../zsh-5.9-doc.tar.xz
Install zsh by running the following commands:
./configure --prefix=/usr \
--sysconfdir=/etc/zsh \
--enable-etcdir=/etc/zsh \
--enable-cap \
--enable-gdbm &&
make &&
makeinfo Doc/zsh.texi --plaintext -o Doc/zsh.txt &&
makeinfo Doc/zsh.texi --html -o Doc/html &&
makeinfo Doc/zsh.texi --html --no-split --no-headers -o Doc/zsh.html
If you have texlive-20220321 installed, you can build PDF format of the documentation by issuing the following command:
texi2pdf Doc/zsh.texi -o Doc/zsh.pdf
To test the results, issue: make check.
Now, as the root user:
make install &&
make infodir=/usr/share/info install.info &&
install -v -m755 -d /usr/share/doc/zsh-5.9/html &&
install -v -m644 Doc/html/* /usr/share/doc/zsh-5.9/html &&
install -v -m644 Doc/zsh.{html,txt} /usr/share/doc/zsh-5.9
If you downloaded the optional documentation, install it by issuing the following commands as the root user:
make htmldir=/usr/share/doc/zsh-5.9/html install.html &&
install -v -m644 Doc/zsh.dvi /usr/share/doc/zsh-5.9
If you built the PDF format of the documentation, install it by issuing the following command as the root user:
install -v -m644 Doc/zsh.pdf /usr/share/doc/zsh-5.9
Command Explanations
--sysconfdir=/etc/zsh and --enable-etcdir=/etc/zsh: These parameters are used so that all the zsh configuration files are consolidated into the /etc/zsh directory. Omit these parameters if you wish to retain historical compatibility by having all the files located in the /etc directory.
--enable-cap: This option enables POSIX capabilities.
--enable-gdbm: This option enables the use of the GDBM library.
--enable-pcre: This option allows zsh to use the PCRE regular expression library in shell builtins.
Configuring zsh
Config Files
There are a whole host of configuration files for zsh including /etc/zsh/zshenv, /etc/zsh/zprofile, /etc/zsh/zshrc, /etc/zsh/zlogin and /etc/zsh/zlogout. You can find more information on these in the zsh(1) and related manual pages.
The first time zsh is executed, you will be prompted by messages asking several questions. The answers will be used to create a ~/.zshrc file. If you wish to run these questions again, run zsh /usr/share/zsh/5.9/functions/zsh-newuser-install -f.
There are several built-in advanced prompts. In the zsh shell, start advanced prompt support with autoload -U promptinit, then promptinit. Available prompt names are listed with prompt -l. Select a particular one with prompt <prompt-name>. Display all available prompts with prompt -p. Except for the list and display commands above, you can insert the other ones in ~/.zshrc to be automatically executed at shell start, with the prompt you chose.
Configuration Information
Update /etc/shells to include the zsh shell program names (as the root user):
cat >> /etc/shells << "EOF"
/bin/zsh
EOF
Contents
Installed Programs: zsh and zsh-5.9 (hardlinked to each other)
Installed Libraries: Numerous plugin helper modules under /usr/lib/zsh/5.9/
Installed Directories: /usr/{lib,share}/zsh and /usr/share/doc/zsh-5.9
Short Description
zsh is a shell which has command-line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and a host of other features.