Almquist shell

Last updated
Almquist shell
Developer(s) Kenneth Almquist
Initial releaseMay 30, 1989;35 years ago (1989-05-30)
Written in C
Operating system Unix-like
Platform Cross-platform
Type Unix shell
Website www.in-ulm.de/~mascheck/various/ash/   OOjs UI icon edit-ltr-progressive.svg

Almquist shell (also known as A Shell, ash and sh) is a lightweight Unix shell originally written by Kenneth Almquist in the late 1980s. Initially a clone of the System V.4 variant of the Bourne shell, it replaced the original Bourne shell in the BSD versions of Unix released in the early 1990s.

Contents

History

ash was first released via a posting to the comp.sources.unix Usenet news group, approved and moderated by Rich Salz on 30 May 1989. It was described as "a reimplementation of the System V shell [with] most features of that shell, plus some additions". [1]

Fast, small, and virtually compatible[ citation needed ] with the POSIX standard's specification of the Unix shell, ash did not provide line editing or command history mechanisms, because Almquist felt that such functionality should be moved into the terminal driver. However, current variants support it.

The following is extracted from the ash package information from Slackware v14:

ash (Kenneth Almquist's ash shell)

A lightweight (92K) Bourne compatible shell. Great for machines with low memory, but does not provide all the extras of shells like bash, tcsh, and zsh. Runs most shell scripts compatible with the Bourne shell. Note that under Linux, most scripts seem to use at least some bash-specific syntax. The Slackware setup scripts are a notable exception, since ash is the shell used on the install disks. NetBSD uses ash as its /bin/sh.

Myriad forks have been produced from the original ash release. [2] These derivatives of ash are installed as the default shell (/bin/sh) on FreeBSD, NetBSD, DragonFly BSD, MINIX, and in some Linux distributions. MINIX 3.2 used the original ash version, whose test feature differed from POSIX. [3] That version of the shell was replaced in MINIX 3.3. Android used ash until Android 4.0, at which point it switched to mksh. [4]

Dash

Debian Almquist shell (DASH)
Developer(s) Herbert Xu
Initial releaseJuly 15, 1997;27 years ago (1997-07-15)
Stable release
0.5.12 / December 11, 2022;22 months ago (2022-12-11)
Repository git.kernel.org/pub/scm/utils/dash/dash.git
Written in C
Operating system Linux, Android
Type Unix shell
License 3-clause BSD license with mksignames under GNU GPL [5]
Website gondor.apana.org.au/~herbert/dash/

In 1997 Herbert Xu ported ash from NetBSD to Debian Linux. In September 2002, with release 0.4.1, this port was renamed to Dash (Debian Almquist shell). Xu's main priorities are POSIX conformance and slim implementation. [2]

Like its predecessor, Dash implements support for neither internationalization and localization nor multi-byte character encoding (both required in POSIX).[ citation needed ] Line editing and history support based on GNU Readline is optional (--with-libedit).

Adoption in Debian and Ubuntu

Because of its slimness, Ubuntu decided to adopt Dash as the default /bin/sh [6] [7] in 2006. The reason for using Dash is faster shell script execution, [8] especially during startup of the operating system, compared to previous versions of Debian and Ubuntu that used Bash for this purpose, although Bash is still the default login shell for interactive use. [9] Dash became the default /bin/sh in Ubuntu starting with the 6.10 release in October 2006. [7] Dash replaced Bash and became the default /bin/sh in Debian 6 (Squeeze), released in February 2011. [6]

A result of the shift is that many shell scripts were found making use of Bash-specific functionalities ("bashisms") without properly declaring it in the shebang line. [10] [11] The problem was first spotted in Ubuntu and the Ubuntu maintainers decided to make all the scripts comply with the POSIX standard. The changes were later upstreamed to Debian, which eventually adopted Dash as its default /bin/sh too. As a result, Debian policy was amended to allow script developers to assume a largely POSIX-compliant shell, save for the extensions merged into Dash for convenience (local, echo -n, test -a / -o). [12] [13] A similar transition has happened in Slackware Linux, although their version of ash is only partially based on Dash. [2]

Embedded Linux

Ash (mainly the Dash fork) is also fairly popular in embedded Linux systems. Dash version 0.3.8-5 was incorporated into BusyBox, the catch-all executable often employed in this area, and is used in distributions like DSLinux, Alpine Linux, Tiny Core Linux and Linux-based router firmware such as OpenWrt, Tomato and DD-WRT.

See also

Related Research Articles

<span class="mw-page-title-main">Bash (Unix shell)</span> GNU replacement for the Bourne shell

Bash, short for Bourne-Again SHell, is a shell program and command language supported by the Free Software Foundation and first developed for the GNU Project by Brian Fox. Designed as a 100% free software alternative for the Bourne shell, it was initially released in 1989. Its moniker is a play on words, referencing both its predecessor, the Bourne shell, and the concept of rebirth.

<span class="mw-page-title-main">KornShell</span> Bourne shell backward compatible Unix shell created by David Korn

KornShell (ksh) is a Unix shell which was developed by David Korn at Bell Labs in the early 1980s and announced at USENIX on July 14, 1983. The initial development was based on Bourne shell source code. Other early contributors were Bell Labs developers Mike Veach and Pat Sullivan, who wrote the Emacs and vi-style line editing modes' code, respectively. KornShell is backward-compatible with the Bourne shell and includes many features of the C shell, inspired by the requests of Bell Labs users.

<span class="mw-page-title-main">Shell script</span> Script written for the shell, or command line interpreter, of an operating system

A shell script is a computer program designed to be run by a Unix shell, a command-line interpreter. The various dialects of shell scripts are considered to be command languages. Typical operations performed by shell scripts include file manipulation, program execution, and printing text. A script which sets up the environment, runs the program, and does any necessary cleanup or logging, is called a wrapper.

The Single UNIX Specification (SUS) is a standard for computer operating systems, compliance with which is required to qualify for using the "UNIX" trademark. The standard specifies programming interfaces for the C language, a command-line shell, and user commands. The core specifications of the SUS known as Base Specifications are developed and maintained by the Austin Group, which is a joint working group of IEEE, ISO/IEC JTC 1/SC 22/WG 15 and The Open Group. If an operating system is submitted to The Open Group for certification, and passes conformance tests, then it is deemed to be compliant with a UNIX standard such as UNIX 98 or UNIX 03.

<span class="mw-page-title-main">Unix shell</span> Command-line interpreter for Unix operating system

A Unix shell is a command-line interpreter or shell that provides a command line user interface for Unix-like operating systems. The shell is both an interactive command language and a scripting language, and is used by the operating system to control the execution of the system using shell scripts.

<span class="mw-page-title-main">Bourne shell</span> Command-line interpreter for operating systems

The Bourne shell (sh) is a shell command-line interpreter for computer operating systems.

<span class="mw-page-title-main">C shell</span> Unix shell

The C shell is a Unix shell created by Bill Joy while he was a graduate student at University of California, Berkeley in the late 1970s. It has been widely distributed, beginning with the 2BSD release of the Berkeley Software Distribution (BSD) which Joy first distributed in 1978. Other early contributors to the ideas or the code were Michael Ubell, Eric Allman, Mike O'Brien and Jim Kulp.

tcsh Unix shell based on and compatible with the C shell

tcsh is a Unix shell based on and backward compatible with the C shell (csh).

pwd Directory information command on various operating systems

In Unix-like and some other operating systems, the pwd command writes the full pathname of the current working directory to the standard output.

In the Unix operating system, shar is an archive format created with the Unix shar utility. A shar file is a type of self-extracting archive, because it is a valid shell script, and executing it will recreate the files. To extract the files, only the standard Unix Bourne shell sh is usually required.

file (command) Standard Unix program

The file command is a standard program of Unix and Unix-like operating systems for recognizing the type of data contained in a computer file.

<span class="mw-page-title-main">Comparison of command shells</span>

A command shell is a command-line interface to interact with and manipulate a computer's operating system.

env Unix command utility

env is a shell command for Unix and Unix-like operating systems. It is used to either print a list of environment variables or run another utility in an altered environment without having to modify the currently existing environment. Using env, variables may be added or removed, and existing variables may be changed by assigning new values to them.

In computing, a shebang is the character sequence #!, consisting of the characters number sign and exclamation mark, at the beginning of a script. It is also called sharp-exclamation, sha-bang, hashbang, pound-bang, or hash-pling.

getopts is a built-in Unix shell command for parsing command-line arguments. It is designed to process command line arguments that follow the POSIX Utility Syntax Guidelines, based on the C interface of getopt.

The script command is a Unix utility that records a terminal session. It dates back to the 1979 3.0 Berkeley Software Distribution (BSD).

<span class="mw-page-title-main">Unix-like</span> Operating system that behaves similarly to Unix, e.g. Linux

A Unix-like operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-like application is one that behaves like the corresponding Unix command or shell. Although there are general philosophies for Unix design, there is no technical standard defining the term, and opinions can differ about the degree to which a particular operating system or application is Unix-like.

mandoc is a utility used for formatting man pages in BSD Operating Systems, specifically those written in the mdoc and man macro languages. Unlike the groff and older troff and nroff tools that are predominantly used for this purpose by tools such as man, mandoc focuses specifically on manuals and is not suitable for general-purpose type-setting.

References

  1. Almquist, Kenneth (May 30, 1989). Rich Salz (ed.). "v19i001: A reimplementation of the System V shell, Part01/08". Usenet newsgroup, comp.sources.unix.
  2. 1 2 3 Mascheck, Sven. "Ash (Almquist Shell) Variants". www.in-ulm.de.
  3. Thomas E. Dickey (2015). "TEST versus Portability" . Retrieved March 1, 2020.
  4. Elliott Hughes (2018-06-20). "Android's shell and utilities" . Retrieved 2020-02-29.
  5. Xu, Herbert. "COPYING". The Linux Kernel Archives. Retrieved 23 December 2023.
  6. 1 2 "Non-interactive Shell". Debian Wiki. 2020-01-13. Retrieved 2020-02-29.
  7. 1 2 "Dash as /bin/sh". Ubuntu Wiki. 2017-12-16. Retrieved 2020-02-29.
  8. Neal Krawetz (2011). Ubuntu: Powerful Hacks and Customizations. John Wiley & Sons. p. 178. ISBN   9781118080382.
  9. Christopher Negus; Francois Caen (2011). Ubuntu Linux Toolbox. John Wiley & Sons. p. 49. ISBN   9781118079140.
  10. Egil Hasting (2006-09-20). "Script that are using bash could be broken with the new symlink". Launchpad . Retrieved 2020-02-29.
  11. comotion (2007-09-21). "dash as #!/bin/sh introduces countless incompatibilities". Launchpad. Retrieved 2020-02-29.
  12. "10. Files". Debian Policy Manual v4.5.0.2.
  13. checkbashisms(1)    Linux General Commands Manual