Almquist shell

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Almquist shell
Developer(s) Kenneth Almquist
Initial release May 30, 1989; 27 years ago (1989-05-30)
Development status Active
Written in C
Operating system Various Unix-like operating systems (BSD, MINIX, Linux, Android)
Available in English, multilingual (gettext)[citation needed]
Type Unix shell

The 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.

History, Versions and Impact[edit]

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]

The following is extracted from the ash package information from Slackware:[when?]

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 and Ubuntu uses ash as its /bin/sh.

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

Derivative versions of ash are installed as the default shell (/bin/sh) on FreeBSD, NetBSD, OpenBSD,[2] DragonFly BSD, MINIX, and Android,[3][4] and in some Linux distributions.

dash: Ubuntu, Debian and POSIX compliance of Linux distributions[edit]

Debian Almquist shell (DASH)
Developer(s) Herbert Xu
Initial release July 15, 1997; 19 years ago (1997-07-15)
Development status Active
Written in C
Operating system Linux, Android
Available in English, multilingual (gettext)[citation needed]
Type Unix shell
Website http://gondor.apana.org.au/~herbert/dash/

In 1997 Herbert Xu ported the 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.[5] Because of these two priorities it became very influential in the Linux world.

Slimness[edit]

Because of its slimness, Ubuntu decided to adopt the 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.[10] Dash replaced ash and became the default /bin/sh in Debian 6 (Squeeze).[11]

Dash does neither implement support for Internationalization and localization nor support for multi-byte character encoding.

POSIX compliance[edit]

During the transition by Ubuntu, numerous scripts making use of Bash-specific functionality (but not declaring it) were discovered.[12][13] The elements understood only by the bash were called bashisms. Instead of stopping the process of migration to the dash, they decided to make all the scripts POSIX compliant. These altered scripts went upstream an after a while also Debian decided to adopt the dash as it's default /bin/sh. The dash thus forced first Ubuntu and later on Debian to make their shell sripts POSIX compliant. As these scripts went even further upstream, the POSIX compliance spread also to other (non-Debian-based) distributions, like Arch/Manjaro etc.

Embedded Linux[edit]

Ash is also fairly popular in embedded Linux systems; its code was incorporated into the BusyBox 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[edit]

References[edit]

  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. ^ The Regents of the University of California (1991). "OpenBSD sh source code". Retrieved 29 June 2016. This code is derived from software contributed to Berkeley by Kenneth Almquist. 
  3. ^ "Android sh source". [dead link]
  4. ^ "Android sh source (android-4.4_r1.2 branch)". Retrieved 23 April 2014. 
  5. ^ http://www.in-ulm.de/~mascheck/various/ash/#dash
  6. ^ "Default /bin/sh shell". Debian Wiki. Retrieved 29 June 2016. 
  7. ^ "Dash as /bin/sh". Ubuntu Wiki. Retrieved 29 June 2016. 
  8. ^ Neal Krawetz (2011). Ubuntu: Powerful Hacks and Customizations. John Wiley & Sons. p. 178. 
  9. ^ Christopher Negus; Francois Caen (2011). Ubuntu Linux Toolbox. John Wiley & Sons. p. 49. 
  10. ^ Dash as /bin/sh in Ubuntu 6.10 Archived November 7, 2016, at the Wayback Machine.
  11. ^ Dash as /bin/sh Archived March 5, 2016, at the Wayback Machine.
  12. ^ Ubuntu bug #61463: script that are using bash could be broken with the new symlink Archived July 6, 2016, at the Wayback Machine.
  13. ^ Ubuntu bug #141481: dash as #!/bin/sh introduces countless incompatibilities Archived March 3, 2016, at the Wayback Machine.

External links[edit]