4 pontos por GN⁺ 2024-12-09 | 1 comentários | Compartilhar no WhatsApp
  • O maior programa shell do mundo

    • akinomyoga/ble.sh: total de 61K LoC (46K SLoC). Um Bash Line Editor, um editor de linha interativo no estilo do fish escrito em bash puro. O arquivo principal out/ble.sh contém 30K LoC (23K SLoC), e no total há mais de 60K LoC. Inclui muitos comentários em japonês. Há uma visão geral de como o ble.sh funciona, mostrando o uso de estruturas de dados muito sofisticadas.

    • kalua: um add-on do OpenWRT composto por cerca de 56K SLoC/linhas de shell POSIX.

    • bashdb: um depurador para bash composto por cerca de 14K linhas de bash. Tem uma história interessante de implementação do depurador.

    • drwetter/testssl.sh: composto por 21K linhas de bash em um único arquivo. Parece ter sido escrito manualmente.

    • Simplenetes: Kubernetes feito em 17K linhas de Shell. Surpreendente, mas atualmente inativo.

    • rkhunter: no site oficial, há 21K linhas de shell Bourne escritas entre 2003 e 2018.

    • romkatv/powerlevel10k: há 12K linhas de script zsh no diretório internal/. Além disso, existem 8K linhas de configuração e scripts auxiliares.

    • dylanaraps/neofetch: exibe informações do sistema com 10K linhas de bash 3.2.

    • xwmx/nb: o próprio nb tem 26K LoC (22K SLoC) de bash. Além disso, contando os testes bats como bash, há 91K LoC (61K SLoC).

    • distrobox: composto por mais de 7K linhas de scripts bash. Permite usar qualquer distribuição Linux dentro do terminal.

    • acme.sh: script shell de 7K linhas para emitir e renovar certificados.

    • inxi 2.3.56 [obsolete]: composto por 16K linhas de bash. Começou em 2008 como um fork do infobash.

    • bashforth: composto por cerca de 3800 linhas, mas implementa uma linguagem de programação de verdade.

    • yoda: tem metade do tamanho do bashforth, mas implementa um interpretador e compilador completos.

    • vegardit/bash-funk: biblioteca Bash com total de 27K LoC (24K SLoC).

    • Relax-and-Recover: 35K LoC (24K SLoC). Ferramenta de backup e recuperação.

    • abcde / A Better CD Encoder: usado para ripar CDs e composto por cerca de 5,5k LoC.

    • thc-segfault: 3,3K LoC. Servidor pubnix construído principalmente em Bash.

    • ffmpeg/configure: 8,4K LoC. Script de configuração do FFmpeg escrito manualmente.

    • ffhevc: 4k LoC. Script wrapper em Bash totalmente escrito à mão para codificar vídeo em HEVC usando FFmpeg e libx265.

    • ffx264: 3,9k LoC. Script wrapper em Bash totalmente escrito à mão para codificar vídeo em H.264/AVC usando FFmpeg e libx264.

    • h264enc: 9,2k LoC. Script wrapper em Bash totalmente escrito à mão para codificar vídeo em H.264/AVC usando MEncoder.

    • bashtop: 5,3k LoC. Monitor de recursos.

    • halcyon: 6,6k LoC. Sistema de instalação de apps Haskell.

    • winetricks: script shell com 22K linhas. Instala vários programas Windows no Wine.

    • wordshell: cerca de 7k linhas de código. Gerencia vários sites WordPress pela linha de comando.

    • BaCon: cerca de 10k linhas de código. Converte programas escritos em BASIC para C.

  • Linguagens semelhantes a shell / DSL

    • modernish: um dialeto de shell portátil escrito em shell.

    • bats: DSL para escrever testes. Gera código bash.

    • bashible: DSL semelhante ao Ansible em bash.

    • clash: framework orientado a objetos compatível com shell POSIX moderno.

    • bash Infinity: biblioteca padrão e framework boilerplate para bash.

  • Programas pequenos

    • Alpine, Aboriginal, Debian scripts: ver a postagem do blog.

    • Completion scripts: grandes, mas frequentemente repetitivos.

    • _git Zsh completion: 8,3k linhas de código.

    • git-completion.bash: conclusão do Docker.

    • dyne/Tomb: cerca de 3500 linhas de script zsh.

    • Basalt: gerenciador de pacotes completo escrito em Bash puro (por volta de 2021). Tem apenas alguns milhares de linhas, mas já possui um ecossistema rico (mais de 15 apps/bibliotecas).

1 comentários

 
GN⁺ 2024-12-09
Comentários do Hacker News
  • Na Sony, há 25 anos, fui designado para um projeto de melhoria de um sistema de gerenciamento de pedidos muito lento e que travava com frequência.

    • Era um sistema composto por 50.000 linhas de shell script abandonadas por décadas em um servidor AIX.
    • Usando Perl, reduzi o sistema para 5.000 linhas e melhorei o desempenho em 10 a 100 vezes.
    • Foi uma experiência muito satisfatória.
  • Escrevi o instalador do Enrust CA e do diretório, e ele evoluiu para rodar em todos os Unix.

    • A instalação era simples, mas os upgrades eram complexos.
    • Era necessário lidar com pequenas diferenças entre os utilitários de cada Unix.
    • O Unix da DEC era confuso, com utilitários de linha de comando que limitavam a largura da saída.
    • O HP-UX tinha mudanças a cada versão.
  • Tentei escrever o interpretador da linguagem de script Lil em bash, mas acabei escolhendo AWK por causa da dificuldade com operações de ponto flutuante e do suporte limitado a arrays.

    • O AWK estava disponível em ambientes POSIX e servia bem como linguagem de uso geral.
  • Scripts em Bash não são adequados para escrever programas complexos.

    • A legibilidade é ruim, as regras de escopo de variáveis são sutis e o tratamento de erros é primitivo.
    • A falta de ferramentas de análise estática, linters e depuradores dificulta a manutenção.
    • Testar é trabalhoso, e é difícil lidar com lógica complexa ou estruturas de dados.
    • O Bash é adequado para automações simples, mas outras linguagens são melhores para aplicações complexas.
  • O script do rkhunter tem um código bom e rico em informações.

    • Muito código é usado para garantir que os utilitários funcionem como esperado em várias plataformas.
    • Se tivesse sido escrito em uma linguagem de programação mais complexa, seria menos transparente.
  • O maior programa em shell que já usei no passado foi o abcde, com cerca de 5.500 linhas de código.

  • O cliente do FreeBSD Update é composto por cerca de 3.600 linhas de código sh.

    • Como ferramenta para atualizar o sistema operacional, oferece uma quantidade considerável de funcionalidade.
  • O shell pode ser a única ferramenta com disponibilidade garantida, mas vale repensar ao escrever grandes aplicações em shell.

  • O script acme.sh tem 7,1 mil linhas e é usado para emitir e renovar certificados do Lets Encrypt.

  • No mod_pagespeed, usaram shell scripts para realizar testes de sistema, mas teria sido melhor migrar para Python.

    • Foram usadas 10.579 linhas de código bash.
    • Fazer a transição gradualmente teria sido mais eficiente.