web-dev-qa-db-fra.com

Terminal vs bash?

Je suis sur un Mac, mais je pense que cela s'applique généralement à Unix.

Je suis en train d'apprendre les scripts Shell et il me manque quelque chose. Quand je suis dans le terminal ordinaire, je peux utiliser la syntaxe de script comme les boucles for et autres en conjonction avec des commandes pour faire des choses.

Mais ....bash ouvre un interpréteur pour les scripts Shell.

C'est là que je suis confus, car le terminal n'est-il pas déjà un interpréteur pour les scripts Shell, comme le montre le fait que le script fonctionne lorsqu'il est donné à stdin?

Question bonus: en quoi bash est-il différent de bash -i, qui selon man "démarre une session interactive" ..... n'est-ce pas ce qui se passe lorsque vous entrez simplement bash seul? Ce qui, à mes yeux, n'est pas différent que d'être dans le terminal normal en premier lieu ...

30
temporary_user_name

Lorsque vous lancez un terminal, il exécutera toujours un programme à l'intérieur. Ce programme sera généralement par défaut votre Shell. Sous OS X, le shell par défaut est Bash. En combinaison, cela signifie que lorsque vous lancez Terminal, vous obtenez une fenêtre d'émulateur de terminal avec bash à l'intérieur (par défaut).

Vous pouvez changer le Shell par défaut en quelque chose d'autre si vous le souhaitez, bien que OS X ne soit livré qu'avec bash et tcsh. Vous pouvez choisir de lancer une commande personnalisée dans un nouveau terminal avec la commande open :

open -b com.Apple.terminal somecommand

Dans ce cas, votre Shell ne l'est pas s'exécute dedans, et lorsque votre commande personnalisée se termine, c'est la fin des choses.

Si vous exécutez bash dans votre terminal qui exécute déjà bash, vous obtenez exactement cela: un shell en exécute un autre. Vous pouvez quitter le shell interne avec Ctrl-D ou exit et vous reviendrez au shell dans lequel vous avez commencé. Cela peut parfois être utile si vous souhaitez tester les modifications de configuration ou personnaliser temporairement votre environnement - lorsque vous quittez le shell interne, les modifications que vous avez apportées partez avec. Vous pouvez les imbriquer profondément et arbitrairement. Si vous ne le faites pas, il n'y a aucun intérêt à en lancer un autre, mais une commande comme bash some-script.sh exécutera uniquement ce script puis quittera, ce qui est souvent utile.


Les différences entre les shells interactifs et non interactifs sont un peu subtiles et concernent principalement les fichiers de configuration qui sont chargés, les comportements d'erreur, et si les alias et similaires sont activés. Le principe approximatif est qu'un shell interactif vous donne les paramètres que vous souhaitez pour vous asseoir devant lui, tandis qu'un shell non interactif vous donne ce que vous voudriez pour un script autonome. Toutes les différences sont documentées explicitement dans le Bash Reference Manual , et aussi dans ne question dédiée sur ce site .

Pour la plupart, vous n'avez pas besoin de vous en soucier. Il n'y a pas souvent de raison de lancer un autre Shell, et lorsque vous le ferez, vous aurez un objectif spécifique à l'esprit et vous saurez quoi en faire.

31
Michael Homer

La machine sur cette image est un terminal (vidéo) , plus précisément un VT1 par - Digital Equipment Corporation.

VT100 terminal from Wikipedia

Il y a des décennies, lorsque les ordinateurs étaient gros, au lieu d'avoir des ordinateurs personnels pour chaque utilisateur, ils auraient pu avoir un terminal, un appareil factice avec écran et clavier, qui est connecté à un ordinateur principal via un câble. Un VT100 n'est pas un ordinateur, mais juste un clavier et un écran. Il y en avait généralement plusieurs connectés à un seul ordinateur.

Il y a donc des décennies, un ordinateur Unix était accessible via un terminal, qui était un périphérique physique. Au fur et à mesure que l'ordinateur personnel est arrivé et que les interfaces utilisateur graphiques sont devenues courantes, il y avait (et il y a toujours) un moyen d'accéder à la ligne de commande Unix comme si par un tel terminal - des applications appelées émulateur de terminal . Le programme Terminal sous OS X est un émulateur de terminal; la plupart des émulateurs de terminaux de nos jours émulent encore assez étroitement ce même périphérique VT100, c'est-à-dire que la plupart des programmes exécutés dans une fenêtre de l'application Terminal ont exactement la même apparence que s'ils étaient exécutés sur le grand ordinateur des années 70 et les données affichées sur un tel terminal. Pour les programmes, chacun la fenêtre de votre émulateur de terminal se comporte comme l'un de ces appareils; la plupart des programmes en ligne de commande n'ont pas remarqué de différence (bien que vous puissiez trouver difficile de connecter un VT100 authentique à votre MBP).


Un terminal vidéo était le successeur d'un appareil appelé terminal papier, un appareil qui aurait un clavier et une imprimante - toutes les sorties des programmes seraient imprimées sur le papier à la place. On peut imaginer qu'un terminal vidéo était une grande amélioration par rapport à de tels appareils. Un exemple de terminal papier, un TeleType Model 33 ASR:

TeleType Model 33 ASR

Cet appareil était également appelé téléscripteur, teletyper, ou tty pour faire court; et le tty coincé depuis le début des années 70, et l'interface pour un tel appareil, ou émulateur de terminal est toujours appelée tty, et dans de nombreux langages de programmation la sortie du texte à afficher dans une fenêtre de terminal est encore appelée "impression"; à l'origine ce n'était pas une métaphore mais un fait.


Le Shell a toujours été là - depuis l'aube d'Unix, c'est le programme qui a été exécuté après avoir entré votre nom d'utilisateur et votre mot de passe sur le terminal, pour accéder à l'ordinateur central. Le premier programme Shell était le Thompson Shell (sh) de 1971, qui en 1977 a été remplacé par Bourne Shell , également appelé sh . Au début, il a été conçu de telle sorte qu'il ne s'agissait que d'un autre programme pouvant être mis à jour facilement et que les utilisateurs puissent exécuter leur propre programme au lieu du shell par défaut.

Le projet GNU a ensuite produit à partir de zéro un Shell amélioré appelé bash, abréviation de Bourne-again Shell , que Apple a décidé de livrer avec MacOS X aussi.


Dans les années 1970, la distinction était claire: un terminal était ce qui semblait être un morceau de 30 kg de cadre en fonte solide enveloppé dans un boîtier en plastique de couleur crème avec un écran en verre et un clavier devant vous, ou même un appareil avec juste un clavier et imprimante, alors qu'un Shell était un programme fonctionnant sur l'ordinateur principal interprétant vos commandes.

35
Antti Haapala

Il vous manque votre terminal qui exécute déjà bash (ou un autre interpréteur Shell) en premier lieu.

Un terminal et plus précisément un émulateur de terminal dans votre cas n'est qu'un appareil qui passe des touches à un programme sous-jacent et affiche les caractères qui lui sont envoyés. Bien qu'il exécute un shell par défaut, rien n'interdit de démarrer un terminal exécutant une autre application de texte, comme un éditeur de texte ou autre.

Si vous êtes déjà dans une session interactive, exécutez bash et bash -i ne ferait pas vraiment de différence.

8
jlliagre