Um programa que é executado em um shell (por exemplo, pine) versus um shell script

5

Tendo um pouco de dificuldade em encontrar a resposta para a minha pergunta, talvez porque eu possa estar fazendo a pergunta errada.

Eu entendo scripts bash. Eu os escrevo o tempo todo para fazer pequenas coisas úteis repetidamente.

No entanto, gostaria de saber a diferença entre um script de shell e um programa que é executado em um shell. Por exemplo, o que é pinheiro? Em que língua está escrito? Ele é executado em um shell, mas, até onde eu sei, não é um script de shell, é um programa autocontido no qual você pode navegar e, quando você sai, retorna ao shell exatamente onde estava quando o iniciou.

Se eu quisesse escrever um programa que funcionasse de forma semelhante ao pine, no qual ele é executado no shell como um programa com várias funcionalidades, por onde eu começaria? Onde posso encontrar alguns exemplos de programas escritos desta maneira?

    
por CptSupermrkt 29.09.2013 / 22:01

1 resposta

9

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

    
por 29.09.2013 / 23:04