Conheça o projeto BASHSRC

Coleção de bibliotecas com um conjunto de funções que proporcionam ao usuário um estilo de programação funcional com implementação de "tipos".

[ Hits: 5.184 ]

Por: Juliano Santos em 26/03/2018


BASHSRC



O bashsrc é um projeto open source distribuído em uma coleção de bibliotecas desenvolvidas em shell script, com um conjunto de funções úteis que fornece ao desenvolvedor um estilo de programação funcional com implementação de "tipos".

O foco principal é a compatibilidade com o interpretador de comandos BASH 4.3.0 (ou superior), cujas funções são desenvolvidas utilizando apenas recursos built-in e coreutils, evitando a utilização de dependências de pacotes externos que geram 'coprocs' durante a execução.

Porém alguns critérios serão levados em consideração para tal aplicação: desempenho, viabilidade, compatibilidade, distribuição da dependência entre outros, ficando de responsabilidade do desenvolvedor verificar e reportar tais dependências se houverem.

OBJETIVO

Devido as necessidades que surgiram durante o desenvolvido de outros projetos no que se diz respeito a funções específicas, como listar diretório, ler arquivos, expressões regulares entre outras e que sempre nos remetem a realizar adaptações através de pipe lines para obter o resultado pretendido. Essas adaptações mantém o estilo tradicional programação com empilhamento de comandos como cut, grep, sed e etc; em alguns casos o código fica extenso e de difícil compreensão.

Considerando os problemas e pesando minhas opções, cheguei a uma conclusão e pergunta. Porque não criar bibliotecas com funções especificas semelhantes a que encontramos em outras linguagens como Python, Ruby, C etc? E que podem ser importadas sempre que necessário. Seguindo essa linha de raciocínio resolvi dar inicio ao projeto e como todo inicio de projeto vem outras questões: objetivo, viabilidade de aplicação, portabilidade e compatibilidade.

Considerar esses critérios me fez pensar em algo livre de dependências, ou seja, criar funções utilizando apenas recursos do bash (built-in) e ao mesmo tempo otimizado. Todavia estava certo que em algum momento teria que recorrer a comandos externos para extrair o máximo de desempenho. Então se chegasse a esse ponto, que fosse utilizado um comando da lib coreutils do sistema e assim garantir a compatibilidade do projeto.

Durante o desenvolvimento da primeira biblioteca denominada builtin.sh, percebi que poderia fazer algo mais, algo que fosse além de simples funções, que proporcionasse objetividade e produtividade aos protótipo das funções. Foi então que comecei a projetar um recurso abstrato de implementação de tipos e métodos ou uma pseudo entidade de objetos.

A implementação deu forma as bibliotecas e acrescentou um atributo que permite que seja escalável, ou seja, o usuário será capaz de criar seus próprios tipos e métodos sem dificuldades cujo tutorial está em construção no github.

DEPENDÊNCIAS

O projeto (bibliotecas padrão) contém duas dependências, que são:
  • bash v4.3 (ou superior) - Interpretador de comandos.
  • coreutils - GNU Core Utilities, que é um pacote contendo ferramentas úteis com ls, cat, wc etc, presente em qualquer sistema Unix-like.

AMBIENTE

Para utilizar quaisquer bibliotecas é necessário configurar previamente o ambiente.

O bashsrc utiliza a variável BASHSRC_PATH para definir o diretório padrão contendo as bibliotecas/binários.

Insira os valores das variáveis abaixo no arquivo ~/.bashrc ou ~/.profile:

export BASHSRC_PATH=$HOME/bashsrc
$ export PATH=$PATH:$BASHSRC_PATH/src
$ export PATH=$PATH:$BASHSRC_PATH/bin


Caso tenha selecionado um diretório diferente para o projeto, substitua a variável '$HOME' pela localização designada.

Carregando as configurações:

. ~/.bashrc

ou:

. ~/.profile

Obs.: se tudo estiver 'ok', nenhuma mensagem de erro é apresentada.

FUNÇÕES

Os protótipos das funções são prefixadas pelo nome da biblioteca a qual pertence seguindo pelo nome da função cujo os parâmetros posicionais são tratados na ordem determinada em sua declaração.

Protótipo: biblioteca.funcao <[tipo]arg1> <[tipo2]arq2>

A função getopt.parse disponível na biblioteca getopt.sh, está presente em todas as funções e é responsável pela validação dos dados por meio de expressões regulares que garantem uma tipagem forte na passagem dos argumentos. É altamente recomendado sua utilização se pretende garantir os valores recebidos em uma função ou método.

IMPLEMENTAÇÃO DE TIPO

Shell script não possui orientação a objetos, métodos ou heranças. Porém, como qualquer outra linguagem existe o escopo de visibilidade durante a declaração de uma variável e com a abstração adequada é possível a criação de funções que simulam métodos de acesso por entidade.

O método é como uma função mais possui característica de acesso ao membro da entidade e que foi implementada de forma a receber como prefixo o nome do variável instanciada e que "herda" todas as funções do tipo implementado.

Todo o objeto implementado é global, ou seja, seus métodos são visíveis por todo o código, exceto o valor da variável da entidade que só pode ser acessada dentro do seu escopo de declaração. (exceto struct_t)

BIBLIOTECA BUILT-IN

A biblioteca builtin é composta por funções básicas para declaração de tipos, iteração de elementos, loops e etc. Entretanto é de suma importância e imprescindível para o funcionamento do eco sistema do bashsrc, cuja importação deve preceder qualquer outra biblioteca. Ao contrário das demais bibliotecas, suas funções não possuem um prefixo, sendo referenciadas apenas por seu identificador curto.

Protótipo: funcao

CONSIDERAÇÕES FINAIS

O bashsrc tem como objetivo fornecer ao usuário uma alternativa de programação funcional e com recursos extras que independem de outras ferramentas. Sem perder a objetividade, legibilidade e produtividade no desenvolvido de scripts.

No atual momento o bashsrc se encontra na versão 1.0.0 e como todo projeto está sujeito a falhas, mas, estou dedicando meu tempo disponível a corrigi-las, realizar melhorias se necessário e criar novas bibliotecas.

Para manter a confiabilidade e estabilidade do código conto com a ajuda dos usuários na reportação de possíveis erros.

O projeto está disponível no Github: https://github.com/shellscriptx/bashsrc

Para mais informações, consulte a documentação: https://github.com/shellscriptx/bashsrc/wiki

Desenvolvido por: Juliano Santos (SHAMAN)

   

Páginas do artigo
   1. BASHSRC
Outros artigos deste autor

ShellBot - Crie Bots para Telegram em Shell Script

Leitura recomendada

flock - Gerenciador de lockfiles

Processamento Paralelo em Shell Script - Conversão de Arquivos WAV para MP3

GNU Parallel: criando atividades em paralelo com shell script

Ingressando estações de trabalho Ubuntu no AD com Closed In Directory

Simples sistema de backup com acesso remoto

  
Comentários
[1] Comentário enviado por albfneto em 26/03/2018 - 12:39h

Bom, favoritado.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[2] Comentário enviado por madrugada em 28/03/2018 - 09:08h

Meus parabéns! Muito bom.

[3] Comentário enviado por xerxeslins em 02/04/2018 - 12:41h


[2] Comentário enviado por madrugada em 28/03/2018 - 09:08h

Meus parabéns! Muito bom.

Moderação, por favor, uma pequena correção em um provável erro de digitação:
[code]coreuils - GNU Core Utilitie[\code]
seria "coreutils" - faltou a letra 't'

Feito!

[4] Comentário enviado por removido em 12/04/2018 - 11:22h

Como sugestão, senti falta de exemplos do que seria possível fazer com as bibliotecas.
Para quem tem a mesma dúvida, acesse o link da Wiki fornecido no artigo, pois vale a pena.

Não conhecia o projeto e vi que tem várias funções interessantes, que evitam ter que recriar a roda em cada script.
Obrigado pelo artigo.

[5] Comentário enviado por x_SHAMAN_x em 12/04/2018 - 14:59h

Na documentação do projeto existem exemplos de aplicações práticas no uso das funções e que também podem ser acessadas via linha de comando pelo utilitário de documentação "bashsrc" disponibilizado junto ao projeto.

Veja: https://github.com/shellscriptx/bashsrc/wiki/Utilitário

[6] Comentário enviado por fabregas em 03/05/2018 - 20:27h

Muito bom cara, porém faltou exemplos... Parabens


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts