Skip to Content.
Sympa Menu

gnl - Um papo sobre shells

gnl AT framalistes.org

Subject: GNU // Linux // Software Livre // Privacidade // Segurança // Linha de comandos

List archive

Um papo sobre shells


Chronological Thread  
  • From: Hugo Cerqueira <hrcerq AT disroot.org>
  • To: Lista GNL <gnl AT framalistes.org>
  • Subject: Um papo sobre shells
  • Date: Sat, 26 Sep 2020 15:20:37 -0300

Olá, pessoal.

Hoje eu gostaria iniciar um debate sobre os shells. Primeiramente,
gostaria de saber qual shell ou quais shells vocês tem o hábito de
usar. Evidentemente, alguns shells são mais populares que outros. O
bash, por exemplo, já é instalado por default na maioria das distros.

Mas também é comum o dash, para uso não interativo, em alguns casos
(especialmente nas distros da família Debian). Desenvolvedores, muitas
vezes tem preferência pelo zsh ou pelo fish. No Alpine, por sua vez, o
padrão é o shell ash (que faz parte do Busybox).

Mas sejamos francos, existem muitos shells (procure pelos shells
disponíveis nos repositórios da sua distribuição, e talvez se
surpreenda com a quantidade), com variados propósitos, e talvez seja
difícil dedicar o merecido tempo a cada um deles. Isso é um pouco
triste porque podemos estar perdendo muitas boas opções, que sequer
cogitamos.

Por esse motivo, acredito que o compartilhamento de experiências pode
enriquecer muito o debate e nos ajudar a perceber se existe algo que
mereça mais a nossa atenção.

Recentemente, no breve período de tempo em que experimentei o OpenBSD
(em uma máquina virtual apenas), tive contato com o ksh (a versão do
OpenBSD do ksh, que por sua vez é um fork do Public Domain Korn Shell
-- pdksh). Por curiosidade, pesquisei por ksh nos repositórios do Void,
e vi que há duas implementações desse mesmo ksh disponíveis:

* loksh
* oksh

Existe também o ksh 93, da AT&T, mas essa já é uma implementação
diferente. O mksh também é outra implementação do ksh (que também se
baseou no pdksh). Mas enfim, resolvi focar nas implementações adaptadas
do ksh do OpenBSD. E não vi maneira melhor de decidir entre elas senão
testando as duas durante um tempo.

Até o momento não percebi nenhuma grande diferença entre as duas, mas
tenho tido preferência pelo oksh, que além de ser um pouco mais enxuto
(espaço ocupado no sistema) que o loksh, é mantido por um dos
desenvolvedores do OpenBSD.

E por falar em espaço ocupado, eu fiz uma comparação do espaço ocupado
pelo bash e por essas duas implementações do ksh no meu sistema:

$ xhog | egrep "bash|ksh"
oksh-6.7.1_1 395KB
loksh-6.7.2_1 454KB
bash-5.0.018_1 6796KB

Se fizermos as contas, o espaço ocupado pelo bash é aproximadamente 17
vezes superior ao do oksh, e aproximadamente 15 vezes superior ao do
loksh. Isso não quer dizer que o bash seja ruim, mas isso me fez pensar
o que poderia estar por trás dessa enorme diferença. Evidentemente, que
o bash oferece mais recursos que o ksh. E em determinadas situações
esses recursos podem ser muito valiosos. No entanto, até agora não
senti falta de absolutamente nada, usando o ksh.

É bom lembrar também que todo esse espaço ocupado se traduz em mais
linhas de código, que por sua vez levanta preocupações relacionadas a
segurança. Esse foi, diga-se de passagem, o primeiro critério que me
levou ao ksh do OpenBSD.

Mas que fique claro, não estou sugerindo a ninguém que esteja usando o
bash que o troque por outro shell, mas que apenas reflita sobre o shell
que mais adere ao seu perfil, que pode muito bem ser o bash. E ainda,
este não é um ataque ao projeto GNU (do qual o bash faz parte), como
muito se feito por aí, pois por este projeto tenho o maior respeito.

Em outras palavras, o que proponho é um debate sadio sobre as opções
disponíveis, considerando prós e contras de cada opção, com interesses
e experiências de cada um.

E já que o assunto aqui é shell, acho que vale a pena mencionar também,
para quem eventualmente não conheça, um utilitário que tenho em grande
estima, chamado shellcheck. Trata-se de um utilitário de linha de
comando (embora se possa também usá-lo por uma interface Web, na página
do projeto, vide abaixo), que aponta possíveis falhas no seu código
shell.

Ele inclusive observa o tipo de shell a que se destina o seu script
(com base na primeira linha, conhecida como shebang), apontando
questões que sejam específicas do shell escolhido. Segue abaixo a
página oficial do projeto.

https://www.shellcheck.net/

--
Atenciosamente,

Hugo R. Cerqueira

"As invenções são, sobretudo, o
resultado de um trabalho teimoso."

(Alberto Santos-Dumont)



Archive powered by MHonArc 2.6.19+.

Top of Page