# Emulador de terminal

* No s'ha de confondre amb línia d'ordres.
Un emulador de terminal és un programa informàtic que simula el funcionament d'un terminal d'ordinador en qualsevol dispositiu de visualització. Incorporen característiques com ara control de processos, redirecció d'entrada/sortida, llistat i lectura de fitxers, protecció, comunicacions i un llenguatge d'ordres per escriure programes per lots o (scripts o guions). Un dels llenguatges o intèrprets més coneguts, és el Bourne Shell, el qual va ser l'intèrpret usat en les primeres versions d'Unix i es va convertir en un estàndard de facto.
En ingressar les ordres en l'emulador, un intèrpret d'ordres analitza la seqüència de caràcters ingressada i, si la sintaxi de l'ordre és correcta, l'executa, recorrent per a això a les funcions que ofereix el sistema operatiu o el programa que representa, bé sigui un gestor de banc de dades, una sessió de FTP, etc. La resposta a l'usuari es representa en el monitor, És una forma de treball interactiva, és a dir, usuari i màquina es comuniquen en forma successiva.

## Breu ressenya històrica

Des dels seus inicis, els ordinadors tenien petits terminals de text per interaccionar amb els seus usuaris. Un terminal es compon únicament d'un teclat i una pantalla capaç de mostrar text. El terminal es connecta a l'ordinador a través d'un simple interfície sèrie (més o menys, un simple cable). Un ordinador pot tenir connectats diversos terminals simultàniament.
Amb la proliferació dels miniordinadors, una mateixa persona estava obligada a treballar amb diversos terminals sobre la seva taula, un per cada ordinador. Atès que aquests ordinadors ja disposaven de xarxes de comunicacions, es va fer palesa la idoneïtat de poder controlar diversos ordinadors des d'un mateix terminal. Aquest terminal executa un programa emulador que bàsicament, permet a un ordinador simular ser un terminal d'un altre ordinador. Així neixen els primers emuladors per Unix.
La utilitat de l'emulador de terminal es va fer encara més gran amb l'arribada dels ordinadors personals a les empreses. Els treballadors ara tenien un ordinador d'escriptori i un terminal sobre la seva taula. Això no solament significava una molèstia per al treballador. També suposava un sobrecost per l'empresa, ja que havia de mantenir dos equips diferents, la xarxa de comunicacions i les connexions sèrie dels terminals. L'ús d'un emulador de terminal permetia eliminar el vell terminal físic així com tots els cables sèrie, donant valor afegit a la xarxa de comunicacions. A més el cost de la llicència d'un emulador de terminal és sensiblement inferior al cost d'un terminal físic.
Avui dia els emuladors de terminal per a ordinador personal segueixen en ús en aquelles organitzacions que mantenen sistemes centrals (Banca i Administracions Públiques, essencialment).
Els emuladors de terminal tenen la seva evolució en els moderns escriptoris remots.

## Tipologia

Tots els emuladors de terminal són molt simples, es limiten a enviar i rebre caràcters de text a través d'una xarxa de comunicacions. Els caràcters enviats es corresponen amb pulsacions en el teclat i els caràcters rebuts corresponen amb la pantalla visualitzada. L'únic que els diferencia és el tipus de terminal físic emulat. Encara que existeix una gran varietat de terminals (tant físics com emulats), gairebé tots ells són variacions de dos models bàsics:
* La gamma VT-100. Es tracta de terminals fabricats per Digital Equipment Corporation i utilitzats principalment en els seus ordinadors VAX i posteriors. Especialment popular és el model VT-320.
* La gamma 3270. Són terminals fabricats per IBM per a tots els seus ordinadors centrals. Són més sofisticats que els terminals VT-100, ja que disposen de cursor i camps que l'usuari pot omplir abans de ser enviats a l'ordinador central. És a dir, no s'envia cada pulsació de tecla sinó el conjunt de tot el teclejat en la pantalla un cop que es prem la tecla "Enter".
La diferència entre terminals està en el joc de caràcters emprats, els codis de control que empren (per exemple, per esborrar la pantalla) i els diferents codis de caràcter que corresponen a cada tecla.

## Alguns emuladors de terminal

L'emulador de terminal per excel·lència és Telnet. Es tracta d'una aplicació estàndard de la pila de protocols TCP/IP. No obstant això, Telnet és un emulador de "mínim comú denominador", és a dir, excessivament simple.
En els ordinadors Unix l'emulador de terminal per defecte és Term, que té la seva versió per escriptori gràfic en xterm. Aquest té algunes millores com la possibilitat de visualitzar text en color mitjançant certs codis de control.
En el camp dels ordinadors personals destaquen PuTTY i ssh. No obstant això, aquests deixen fora els terminals 3270. Els productes comercials més estesos són Extra ! i Reflection de la companyia AttachmateWRQ.
Amb la proliferació de les tecnologies web, algunes companyies com Jacada i AttatchmateWRQ tracten de comercialitzar una nova generació d'emuladors que s'executen en el navegador web, bé directament (mitjançant un applet), bé mitjançant un servidor intermedi (una aplicació Web). A més, AttachmateWRQ ofereix solucions per a la integració d'aplicacions web mitjançant la seva solució VERASTREAM. Aquesta solució, d'altra banda, permet modernitzar l'aplicació legacy (resident al host) i donar-li un aspecte web.

## Categories de shell

Poden dividir-se en cuantro categories: tipus Bourne, tipus consola C, no tradicional i històrica.

### Compatibles amb Bourne shell

* Bourne shell (sh) - Escrita per Steve Bourne, quan estava en Bell Labs. Es va distribuir per primera vegada amb la Version 7 Unix, el 1978, i es va millorar amb els anys.
* Almquist shell (ash) - Es va escriure com a reemplaçament de la shell Bourne amb llicència BSD, la sh de FreeBSD, NetBSD (i els seus derivats) estan basats en ash i s'han millorat acord amb POSIX per a l'ocasió.
* Bourne-Again shell (bash) - Es va escriure com a part del projecte GNU per proveir d'un superconjunt de funcionalitat amb l'intèrpret d'ordres Bourne, sol ser l'intèrpret d'ordres per defecte en la majoria de les distribucions GNU/Linux.
* Debian Almquist shell (dash) - Dash és un reemplaçament modern de ash en Debian.
* Korn shell (ksh) - Escrita per David Korn, miestras va estar en Bell Labs.
* Z shell (zsh) - Considerada com la més completa: és el més proper que existeix a abastar un superconjunt de sh, ash, bash, csh, ksh, and tcsh.

### Compatibles amb la shell de C

* C shell (csh) escrita per Bill Joy, mentre va estar en la Universitat de Califòrnia, Berkeley. Es va distribuir per primera vegada amb BSD el 1979.
* tenexa C shell (tcsh).

### Altres o exòtics

* fish, una shell amigable i interctiva, llançada per primera vegada el 2005.
* Mudsh, una shell intel·ligent a l'estil dels videojocs que opera com un MUD.
* Zoidberg, una shell modular escrita en Perl, configurada i d'operació completament en Perl.
* rc, el shell per defecte de Pla 9 from Bell Labs i Version 10 d'Unix escrita per Tom Duff. S'han fet ports per Inferno i per a sistemes operatius basats en Unix.
* És shell (és), una shell compatible amb RC escrita a mitjans dels 90.
* Scsh (Scheme Shell)

### Fitxers de configuració per shells

Un shell llegeix fitxers de configuració en circumstàncies sota diferents dependències de la shell. Aquesta taula mostra els achivos de configuració de les shells més populars:
| | sh | ksh | csh | tcsh | bash | zsh |
| /etc/.login | no | no | login | login | no | no |
| /Etc/csh.cshrc | no | no | no | yes | no | no |
| /etc/csh.login | no | no | no | login | no | no |
| #/. Tcshrc | no | no | no | yes | no | no |
| #/. Cshrc | no | no | yes | yes | no | no |
| #/. Login | no | no | login | login | no | no |
| #/. Logout | no | no | login | login | no | no |
| /Etc/profile | login | login | no | no | i.login | no |
| #/. Profile | login | login | no | no | login | no |
| #/. Bash_profile | no | no | no | no | login | no |
| #/. Bash_login | no | no | no | no | login | no |
| #/. Bashrc | no | no | no | no | n/login | no |
| /etc/zshenv | no | no | no | no | no | yes |
| /Etc/zprofile | no | no | no | no | no | login |
| /etc/zshrc | no | no | no | no | no | int. |
| /Etc/zlogin | no | no | no | no | no | login |
| /etc/zlogout | no | no | no | no | no | login |
| #/. Zshenv | no | no | no | no | no | yes |
| #/. Zprofile | no | no | no | no | no | login |
| #/. Zshrc | no | no | no | no | no | int. |
| #/. Zlogin | no | no | no | no | no | login |
| #/. Zlogout | no | no | no | no | no | login |
Explicació:
* "No" significa que la shell no llegirà l'fitxer en absolut.
* "Yes" significa que el fitxer és sempre llegit pel shell.
* "Login" significa que el fitxer és llegit si l'intèrpret d'ordres és una shell de sessió (loging shell).
* "N/login" significa que el fitxer is llegit si l'intèrpret d'ordres no és una shell de sessió.
* "Int." significa que un fitxer és llegit si és un shell interactiu.
* "I.login" significa que un fitxer is llegit si la shell és de sessió interactiva.

### Històric

* Thompson shell (sh) - La primel shell Unix va ser escrita per Ken Thompson en Bell Labs. Distribuïda amb la versió 1 fins a la 6 d'Unix, des de 1971 a 1975. És considerada molt rudimentària pels estàndards moderns i no és usada en sistemes actuals. N'hi ha algunes parts disponibles: Ancient UNIX Systems.
* PWB shell o Mashey shell (sh) - Una versió de l'intèrpret d'ordres de Thompson, creada per John Mashey i altres, mentre van estar en Bell Labs. Distribuïda amb el Programmer 's Workbench UNIX, el 1976.

## Shells no Unix

Dins el conjunt de sistemes operatius Microsoft Windows, l'anàleg són els programes command.com, o cmd.exe per a sistemes operatius basats en Windows NT, i Windows PowerShell introduït amb Windows Server 2008.

## Nomenclatura: Consoles v/s CLI v/s TUI v/s TTY v/s Terminal v/s Emulació v/s Shell

Pocs termes usats en computació han sofert tants avatars al llarg del progrés tècnic tan intensament com el d'intèrpret d'ordres.
Històricament, la consola era un terminal de dades (és a dir, un dispositiu físic), però com aquests aparells ja gairebé no existeixen, la paraula va passar a utilitzar com a sinònim de "pantalla del CLI". L'expressió consola s'utilitza més comunament en jocs de PC per referir-se a la finestra on es poden ingressar comandos.
D'altra banda, un emulador de terminal (o TTY) és un programa que permet imitar aquells vells terminals, per accedir a diversos serveis encara vigents sota aquest tipus de format (com Telnet). Exemples d'aquests programes són: HyperTerminal, Xterm, PuTTY i SSH.
Amb el desenvolupament dels GUI, els sistemes de finestres proveeixen alguna classe d'emulació per a la manera text, per executar correctament programes que utilitzen TUI (com el Midnight Commander de Linux). D'aquesta manera, tant els shells d'Unix (sota X Windows) com els antics programes de Sistema operatiu de disc (sota MS Windows) són executats amb aquest emulador de la manera text. I, el que és encara més, alguns importants programes (com Bash), actuen també com emuladors de terminal. D'aquesta manera, les expressions emulador de text, consola i terminal acaben usant-se a vegades com a sinònims.
És comú barrejar les tres coses per referir-se a un sol concepte: el lloc on es pot usar la interfície de línia d'ordres.
Per exemple, si connectem un teclat i un monitor a un PC i ho fem arrencar amb GNU/Linux en mode text, la majoria dels usuaris dirà que té una shell. Si des d'aquesta shell s'arrenca la manera gràfica KDE del mateix PC, la pantalla s'il·luminarà amb rerefons i botons. Si s'obre una finestra amb el programa xterm, se li dirà consola. Si en aquesta consola executem SSH i ens comuniquem a través de la xarxa amb un ordinador remot, direm que tenim un terminal obert. En els tres casos treballarem amb una shell, diguem Bash, i les diferències de funcionalitat són mínimes.

## Referències

* ↑ escomposlinux.org. Beyond Linux From Scratch - Versió 6.0 Part II. Configuració posterior a LFS i Programari Addicional.

## Enllaços externs

* Solucions d'emulació de Cybele Programari (anglès)
* d'emulació de Attatchmate (anglès)
* sgtatham/putty/download.html Pàgina de descàrrega de PuTTY (anglès)