Embora já seja frequente ver membros da Geração Y fazendo campanha para alguém arregaçar as mangas em nome deles e extinguir a demanda por interação com o Linux via linha de comando, as shells estão aí para ficar, mesmo que cada vez mais só nos bastidores, em modo não-interativo ou nas mãos de usuários experientes que apreciam seus recursos.

Mas você sabia que a shell original – o primeiro /bin/sh, escrito por Ken Thompson – surgiu há 40 anos, em 1971 (2 anos depois do nascimento do próprio Unix) e tinha menos de 900 linhas de código? Isso porque boa parte do que hoje conhecemos como comandos builtin da shell (incluindo elementos essenciais, como o if) na época eram apenas utilitários externos, até mesmo recursos como o glob (que “interpreta” caracteres especiais como * e ? em parâmetros correspondentes a nomes de arquivo) eram implementações à parte, e a shell era exclusivamente interativa: a capacidade de interpretar scripts veio mais tarde.

Em compensação, recursos como pipes (| ou, na época, ^) e redirecionamento de entrada e saída (<, >, >>, etc.) já estavam presentes.

Daí pra frente a evolução foi acelerada: Stephen Bourne criou a Bourne Shell (que ainda pode ser vista em sistemas contemporâneos) em 1977, fazendo a base do que no final da década de 1980 surgiu como o mestiço /bin/bash (Bourne Again Shell) que hoje vemos como shell default em boa parte das distribuições Linux, do OS X e de outros sistemas UNIX e Unix-like atuais.

Este artigo do developerWorks gringo apresenta esta evolução, falando também de outras shells importantes (e algumas exóticas também), como csh, ksh, scsh e mais.

Aproveitando o embalo: estou terminando de ler (e gostando!) o livro novo do Júlio Neves, Bombando o Shell, com foco em interatividade, incluindo o controle de diálogos em modo gráfico. Em breve publicarei uma análise mais detalhada, mas isso não me impede de recomendá-lo desde já!