🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

O que é Dash? Explicando as características e usos deste shell leve e rápido

Ao usar Linux ou macOS, você provavelmente já ouviu os termos "shell" e "Bash". Mas você já ouviu falar de um shell chamado Dash? Na verdade, o Dash é um herói desconhecido que trabalha duro nos bastidores, especialmente em distribuições Linux baseadas em Debian, como o Ubuntu.

Este artigo é para criadores da web que já ouviram o nome, mas não sabem muito sobre ele. Explicaremos o que é o Dash, suas características, como ele se difere do Bash e seus usos práticos com códigos de exemplo que você pode executar apenas copiando e colando. Ao final deste artigo, você entenderá o apelo do Dash e será capaz de usá-lo de forma eficaz!


O que é o shell Dash?

Dash é a abreviação de "Debian Almquist shell" e, como o nome sugere, é um shell desenvolvido pelo projeto Debian. Originalmente, era uma portabilidade do Almquist Shell (ash) usado no NetBSD para o Linux.

Sua principal característica é ser leve e rápido. O "Bash", que usamos casualmente no terminal, é um "shell de luxo, rico em recursos", com preenchimento extenso do histórico de comandos e funções proprietárias convenientes. Em contraste, o Dash alcança uma agilidade surpreendente ao limitar seus recursos ao conjunto mínimo definido pelo POSIX (um padrão para interfaces de SO portáteis).

Particularmente no Ubuntu e no Debian, o shell padrão do sistema, /bin/sh, é na verdade um link simbólico (como um atalho) para o Dash. Isso permite que os scripts de inicialização do sistema sejam executados rapidamente, contribuindo para a melhoria geral do desempenho do SO.


Principais Vantagens (Características) do Dash

Vamos dar uma olhada mais de perto no que torna o Dash tão bom.

  • 🚀 Velocidade de Execução Rápida: Como seus recursos são simples, a inicialização de programas e a interpretação de scripts são extremamente rápidas. A diferença de velocidade em relação ao Bash é especialmente notável em processos que se repetem milhares de vezes ou ao executar muitos scripts pequenos.
  • Baixo Uso de Memória: Por ser leve, ajuda a conservar a memória. Esta é uma vantagem significativa em sistemas embarcados com memória limitada ou em ambientes de servidor que executam numerosos contêineres simultaneamente.
  • Conformidade com POSIX: O Dash é muito fiel ao padrão POSIX. Isso significa que um script de shell escrito para rodar no Dash tem alta probabilidade de rodar corretamente em outros shells compatíveis com POSIX (como o zsh no macOS). O Dash serve como um excelente ambiente de teste quando você deseja melhorar a portabilidade e a compatibilidade de seus scripts.

Vamos Experimentar! Colocando a Mão na Massa com o Dash

Ver para crer. Vamos colocar a mão na massa com o Dash para experimentar suas características por nós mesmos!

1. Verifique seu shell atual

Primeiro, vamos verificar qual é o seu shell padrão atual. Abra seu terminal и execute o seguinte comando. Na maioria dos casos, ele exibirá "bash" ou "zsh".

$ ps -p $$
  PID TTY          TIME CMD
 5678 pts/0    00:00:00 bash

2. Inicie o Dash

Agora, vamos iniciar o Dash. Apenas digite `dash` na linha de comando e pressione Enter. Quando o prompt (o símbolo de entrada) mudar para `$`, você está no mundo do Dash.

$ dash
$ 

Para retornar ao seu shell original (como o Bash), basta digitar `exit`.


3. [Experiência] Comparação de Velocidade com o Bash

Vamos comparar quão rápido o Dash é com um loop simples. Aqui, executaremos um script que simplesmente conta de 1 a 100.000 tanto no Bash quanto no Dash. Você pode usar o comando `time` para medir o tempo de processamento.

Primeiro, vamos executá-lo com o Bash.

$ time bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'

real    0m1.523s
user    0m1.518s
sys     0m0.005s

*O tempo de execução pode variar dependendo do seu ambiente.


A seguir, vamos executar exatamente o mesmo processo com o Dash.

$ time dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'

real    0m0.384s
user    0m0.381s
sys     0m0.003s

O que você acha? No meu ambiente, o processo que levou cerca de 1,5 segundos no Bash foi concluído em pouco menos de 0,4 segundos no Dash. Isso é uma diferença de velocidade de quase 4x! Como você pode ver, a alta velocidade do Dash é incrivelmente eficaz para executar repetidamente scripts simples.


Pontos a Observar: Recursos do Bash que não existem no Dash

Embora o Dash seja rápido, ele não possui alguns dos recursos convenientes que são padrão no Bash. Isso é chamado de "Bashism". Tenha cuidado, pois se você escrever um script usando a sintaxe do Bash sem perceber, isso causará um erro no Dash.

Exemplo 1: Não é possível usar arrays

No Bash, você pode definir arrays facilmente usando `()`, mas o Dash não tem o conceito de arrays.

No Bash (funciona corretamente)

$ bash -c 'fruits=("apple" "banana" "orange"); echo ${fruits[1]}'
banana

No Dash (resulta em erro)

$ dash -c 'fruits=("apple" "banana" "orange"); echo ${fruits[1]}'
dash: 1: Syntax error: "(" unexpected

Exemplo 2: Não é possível usar o comando de teste estendido `[[ ... ]]`

O comando `[[ ... ]]` do Bash é altamente funcional, permitindo a correspondência de strings e expressões regulares, mas não faz parte do padrão POSIX. No Dash, você deve usar o tradicional `[ ... ]`.

No Bash (funciona corretamente)

$ bash -c '[[ "hello" == "hello" ]] && echo "Yes"'
Yes

No Dash (resulta em erro)

$ dash -c '[[ "hello" == "hello" ]] && echo "Yes"'
dash: 1: [[: not found

Como escrever corretamente no Dash

Para fazer a mesma coisa no Dash, use `[` e um único sinal de igual `=`.

$ dash -c '[ "hello" = "hello" ] && echo "Yes"'
Yes

Exemplo 3: Não é possível usar a expansão de chaves `{...}`

A expansão de chaves, que é útil para gerar nomes de arquivos sequenciais, também é um recurso do Bash.

No Bash (funciona corretamente)

$ bash -c 'echo file-{1..3}.txt'
file-1.txt file-2.txt file-3.txt

No Dash (é exibido como está)

$ dash -c 'echo file-{1..3}.txt'
file-{1..3}.txt

Principais Usos do Dash

Então, considerando essas características, em quais situações o Dash é usado?

  • Scripts de inicialização do sistema: Este é o seu uso mais comum. Ele acelera o tempo de inicialização processando rapidamente os numerosos scripts que são executados quando o SO inicia.
  • Execução de scripts de shell: Você pode melhorar o desempenho escrevendo em Dash scripts que exigem alta velocidade de processamento (por exemplo, análise de grandes arquivos de log, processamento em lote simples).
  • Ambientes com recursos limitados: O Dash é preferido em ambientes com memória e poder de CPU limitados, como dispositivos IoT, sistemas embarcados e contêineres Docker.
  • Verificações de compatibilidade de script: Uma boa maneira de verificar se o seu script de shell depende de recursos específicos do Bash (ou seja, se é compatível com POSIX) é executá-lo com `dash myscript.sh`.

Por outro lado, o Dash não é adequado como um shell interativo (o shell que normalmente usamos no terminal). Seus recursos de preenchimento de comando, busca no histórico e apelidos (aliases) são pobres em comparação com o Bash, o que diminuiria sua eficiência no trabalho diário.


Conclusão: Use Bash e Dash com Sabedoria

Neste artigo, explicamos sobre o shell leve e rápido, o "Dash".

  • Dash é um shell que busca leveza e velocidade ao limitar seus recursos. Ele se destaca em tarefas de sistema nos bastidores e na execução rápida de scripts.
  • Bash é um shell multifuncional repleto de recursos convenientes. Ele se destaca no uso interativo, onde digitamos comandos diariamente.

É importante entender os pontos fortes e fracos de cada shell. Não é recomendado alterar cegamente seu shell de login padrão de Bash para Dash apenas porque "é mais rápido".

Ao lembrar do Dash como um "herói desconhecido" que acelera seu sistema e como uma "arma secreta" para tornar seus scripts de shell mais rápidos, você adicionará mais uma ferramenta ao seu kit de desenvolvedor. Certifique-se de usar o Dash onde for mais apropriado!