Acho que você está confundindo um shell
(um interpretador de linha de comando) com um emulador de terminal.
Um shell, quando executado interativamente e pine
requerem um terminal ou emulador de terminal para interagir com o usuário. pine
não tem nada a ver com o shell.
Um terminal nos velhos tempos era um dispositivo com um monitor e teclado conectado a um computador através de uma linha serial para interagir com o computador (que não tinha monitor ou teclado). A interface é simples e baseada em texto.
A linha serial no computador é um arquivo de dispositivo de caractere (algo como /dev/ttyS0
no Linux, por exemplo). Aplicativos que interagem com o terminal gravam dados nesse dispositivo para exibição no terminal.
Por exemplo, no caso mais simples, pine
escrevendo ASCII a
to /dev/ttyS0
faria com que a sequência de bits correspondentes a esse caractere a
fosse enviada pela linha serial, e o terminal exibisse uma a
na tela na posição atual do cursor.
E quando o usuário pressiona a
no teclado, no caso mais simples, o terminal envia a mesma sequência de bits no outro fio que vai para o computador e o sistema coloca o caractere a
em um buffer, e quando pine
faz um read()
on /dev/ttyS0
, ele retorna esse caractere a
.
Os terminais evoluíram de coisas como tele-máquinas de escrever (sem tela, a
foi impresso em papel) para máquinas com monitores CRT, e algumas com mais recursos como posicionamento de cursor, limpeza / rolagem de região, suporte a cores todos os quais pine
usa, ou até mesmo recursos gráficos. Posteriormente, X forneceu uma maneira muito mais avançada de interagir com um computador desta vez através de uma rede em vez de recursos de linha serial e janelas e desta vez usando um protocolo muito mais complexo do que apenas uma seqüência de caracteres a serem enviados e algumas seqüências de escape.
Ainda assim, décadas de aplicativos foram escritas para o terminal. Há muitas coisas que podem ser feitas com o terminal que não podem ser feitas com X. Como os dados são apenas dois fluxos de caracteres indo em ambas as direções, é fácil, por exemplo, exportar uma sessão de terminal pela rede (pense telnet, ssh), e um aplicativo como cat
pode ser usado para gravar em um terminal para exibir o conteúdo de um arquivo para o usuário visualizar em sua tela e pode ser usado exatamente da mesma maneira, não modificado para o mesmo conteúdo para ser armazenado em um arquivo ou enviado pela rede para algum servidor ... (tudo o que é necessário é redirecionar para onde vai essa saída). O mesmo tipo de coisa não pode ser feito com aplicativos X que geralmente têm um uso e não podem cooperar uns com os outros facilmente.
Por essas e outras razões, os terminais sempre estiveram em uso mesmo depois de X ter se espalhado rapidamente.
Só que agora, em vez de ter terminais reais, temos emuladores de terminal como xterm
, gnome-terminal
, eterm
... Eles emulam um terminal, mas são apenas aplicativos X (que são executados no computador e são exibido em um servidor X, no mesmo computador ou em outro).
Por padrão, quando você inicia um aplicativo emulador de terminal, um shell é iniciado neles, e é por isso que às vezes há confusão entre os dois. Você não precisa executar um shell em um emulador de terminal, pine
não precisa ser iniciado por um shell, mas requer um terminal. É uma aplicação terminal semi-gráfica. Ele interage com um dispositivo de terminal e, na outra extremidade desse dispositivo, espera um emulador de terminal ou terminal com um conjunto mínimo de recursos, como posicionamento do cursor, realce de caractere de destaque ...