Shell Unix
Un shell Unix est un interpréteur de commandes destiné aux systèmes d'exploitation Unix et de type Unix qui permet d'accéder aux fonctionnalités internes du système d'exploitation. Il se présente sous la forme d'une interface en ligne de commande accessible depuis la console ou un terminal. L'utilisateur lance des commandes sous forme d'une entrée texte exécutée ensuite par le shell. Dans les différents systèmes d'exploitation Microsoft Windows, le programme analogue est command.com, ou cmd.exe.
Les systèmes d'exploitation de type Unix disposent le plus souvent d'un shell. À l'origine, l'interpréteur de commandes par défaut était sh, qui donna naissance à de nombreuses variantes, dont csh, étendu en tcsh, ou ksh, ou encore rc... Mais aujourd'hui bash, s'inspirant de sh, ksh, et csh, est le shell le plus répandu, bien qu'il existe d'autres interpréteurs de commandes, comme zsh, ou ash.
Historique des shells Unix
Le premier shell est le Thompson shell (en) apparu en 1971 avec la première version d’Unix et écrit par Ken Thompson, l'un des créateurs d'Unix. Il est remplacé par le Bourne shell, écrit par Stephen Bourne, en 1977 pour la version 7 d'Unix.
En 1978, Bill Joy, alors étudiant à l'Université de Californie à Berkeley, crée csh (C shell), une évolution du shell dont la syntaxe s'inspire de celle du langage C. Il permet notamment la réutilisation de l'historique des commandes. Une version plus moderne du csh est ensuite publiée sous le nom tcsh.
Le Korn shell (ksh) est publié en 1983 par David Korn. Il est compatible avec le Bourne shell, reprend certaines fonctionnalités de csh et ajoute des fonctions de scripts avancées disponibles dans des langages plus évolués tels que le Perl.
Le Bourne-Again shell (bash) apparait quant à lui en 1988. Il est écrit par Brian Fox pour la Free Software Foundation dans le cadre du projet GNU. C'est le shell de nombreuses implémentations libres d'Unix, telles que les systèmes GNU/Linux. Il est compatible avec le Bourne shell dont il se veut une implémentation libre.
Paul Falstad crée zsh en 1990 alors qu'il est étudiant à l'université de Princeton. Ce shell reprend les fonctions les plus pratiques de bash, csh, tcsh.
Shells
- Shell de Stephen Bourne
- Bourne shell (sh)
- Bourne-Again shell (bash)
- csh : C shell
- tcsh (Tenex C shell, version moderne du csh)
- Shell de David Korn : Korn shell (ksh)
- Shell de Kenneth Almquist, utilisé lorsqu'il est nécessaire d'avoir un shell prenant peu de place sur le disque, clone de la variante SVR4 du Bourne shell;
- Ash (Almquist SHell)
- Dash shell (Debian Almquist Shell)
- Zsh (zsh), reprenant les fonctions les plus pratiques de bash, ksh et tcsh.
- fish
Gestion des entrées/sorties et redirection
Les shells permettent de réaliser des redirections. Une redirection consiste à rediriger l'entrée ou la sortie d'une commande vers une autre commande ou un fichier.
Redirection droite simple
Syntaxe :
commande > fichier
Le résultat de l'invocation de la commande commande
sera Ă©crit dans le fichier fichier
, en écrasant le précédent contenu.
Exemple :
$: cat file
Welcome
$: echo "Hello world" > file
$: cat file
Hello world
Redirection droite double
Syntaxe :
commande >> fichier
Le résultat de l'invocation de la commande commande
sera Ă©crit dans le fichier fichier
, à la suite des données déjà présentes.
Exemple :
$: cat file
Welcome
$: echo "Hello world" >> file
$: cat file
Welcome
Hello world
Redirection gauche simple
Syntaxe :
commande < fichier
La commande commande
va lire le contenu du fichier fichier
au lieu de lire sur l'entrée standard (clavier).
Exemple :
$: cat < file
Welcome
Redirection gauche double
Syntaxe :
commande << END
La commande commande
va lire sur l'entrée standard jusqu'à ce que le mot suivant la double redirection soit rencontré.
Exemple :
$: cat << TOTO
? foo
? bar
? moomoo
? TOTO
foo
bar
moomoo
Pipe
Syntaxe :
commande_1 | commande_2
Le résultat de la commande commande_1
va être redirigé dans l'entrée de la seconde commande commande_2
.
Exemple :
$: echo "Hello world" | grep -o "Hello"
Hello
Fichier de configuration
sh | ksh | csh | tcsh | bash | zsh | |
---|---|---|---|---|---|---|
/etc/.login | login | login | ||||
/etc/csh.cshrc | yes | yes | ||||
/etc/csh.login | login | login | ||||
~/.tcshrc | yes | |||||
~/.cshrc | yes | yes[note 1] | ||||
~/etc/ksh.kshrc | int. | |||||
/etc/sh.shrc | int.[note 2] | |||||
$ENV (typically ~/.kshrc)[1] | int.[note 3][note 4] | int. | int.[note 5] | |||
~/.login | login | login | ||||
~/.logout | login | login | ||||
/etc/profile | login | login | login | login[note 6] | ||
~/.profile | login | login | login[note 7] | login[note 6] | ||
~/.bash_profile | login[note 7] | |||||
~/.bash_login | login[note 7] | |||||
~/.bash_logout | login | |||||
~/.bashrc | int.+n/login | |||||
/etc/zshenv | yes | |||||
/etc/zprofile | login | |||||
/etc/zshrc | int. | |||||
/etc/zlogin | login | |||||
/etc/zlogout | login | |||||
~/.zshenv | yes | |||||
~/.zprofile | login | |||||
~/.zshrc | int. | |||||
~/.zlogin | login |
Notes et références
Notes
- only if ~/.tcshrc not found
- Newer versions of the Bourne Shell only
- Available on systems that support the "User Portability Utilities option"; value of the variable must be an absolute path, and it is ignored "if the user's real and effective user IDs or real and effective group IDs are different."[2]
- $ENV is $HOME/.shrc in newer versions of the Bourne Shell
- Same behavior as sh, but only if invoked as sh (bash 2+) or, since bash 4.2, also if invoked explicitly in POSIX compatibility mode (with options --posix or -o posix)[3].
- Only in sh/ksh compatibility mode (when invoked as bash, sh, ksh)
- in fact, the first readable of ~/.bash_profile, ~/.bash_login and ~/.profile; and only ~/.profile if invoked as sh or, as of at least Bash 4.2, if invoked explicitly in POSIX compatibility mode (with options --posix or -o posix)
Références
- SCO Unix Group, SCO Unixware 7 documentation, 22 Apr 2004, retrieved 18 Oct 2012.
- (en) « Shell Command Language », opengroup.org (consulté le )
- (en) « Bash Reference Manual: Bash Startup Files », gnu.org (consulté le )
- Brian Blackmore, « UNIX shell differences » (consulté le )