FAQ da Libtrilux
1 - Por que esse nome?
R. É que Trilux é, desde 2005, o domínio do meu blog pessoal, que fica em trilux.org.
Antes disso, era o nome de um sistema operacional que jamais existiu na vida real, mas servia como pano de fundo para inúmeras lendas e teorias fantasiosas no mundo das salas de bate-papo do IRC dos anos 1990.
Me pareceu uma justa homenagem, no ano em que o blog Trilux completa 20 anos, trazer o sistema Trilux à vida real por meio do nome de uma biblioteca que eu uso frequentemente.
2 - Quem criou a libtrilux?
R. Meu nome é Augusto Campos. Eu fiz meu primeiro script shell no início dos anos 1990, usei bastante shell no HP-UX e no AIX antes de conhecer o Bash (e o Linux), e desde então venho mantendo uma biblioteca genérica, que inclui funções cujos nomes fazem referência a bibliotecas que usei anteriormente em outras linguagens (como Turbo Pascal, entre outras).
Ao longo dos anos, também escrevi algumas vezes sobre o tema, em meu site BR-Linux.org. No rodapé desta página tem alguns links para contato e detalhamento.
3 - Por que você criou a libtrilux?
R. Ela foi criada para atualizar a biblioteca que eu uso em meus próprios scripts. Nesse sentido, ela tem uma clientela bem específica: eu mesmo.
Eu ficarei feliz se ela puder ser útil em algum caso de uso de outras pessoas, e é por isso que a disponibilizei como open source (mas sem suporte!), porém ela é o caso clássico do software criado para uso pessoal.
4 - A libtrilux está disponível para download?
R. Sim, veja mais informações.
5 - A libtrilux é open source?
R. Sim, sob a licença Apache 2.0, ou a licença mencionada no cabeçalho de cada arquivo individual distribuído.
6 - A libtrilux é software livre?
R. Sim, sob a licença Apache 2.0, ou a licença mencionada no cabeçalho de cada arquivo individual distribuído.
7 - Quais as dependências da libtrilux?
R. A principal dependência é a versão do Bash, que deve ser posterior à 5.0 (lançada no início de 2019). A libtrilux verifica, na sua inicialização, se a shell que a chamou é Bash 5.0 ou uma versão posterior, e interrompe a execução caso não seja (veja a próxima pergunta para mais detalhes sobre a versão do Bash).
A biblioteca assume que os utilitários externos que ela usa (que não são muitos, e são usados apenas em casos específicos e excepcionais) são as versões mais comuns, e estarão no PATH.
No lançamento, as únicas funções que usam programas externos são justamente os wrappers que oferecem compatibilidade entre BSD/Mac e GNU em pontos em que os utilitários padrão de cada ambiente diferem entre si: (1) a função sysdate_getepoch usa o comando date para converter datas amigáveis para o formato do Unix (todas as outras funções de manipulação de data são implementadas sem recorrer a comandos externos); e (2) a função mytac usa o tac (ou o tail) para inverter a ordem das linhas de um arquivo.
Caso especial (temporário): A função interna que gerencia a resposta à chamada
Nota: Em versões futuras é possível que haja dependências adicionais, ou que alguma das mencionadas acima seja removida.
Atualização em 4.5.2025: Removida a dependência referente ao comando externo tput - ao custo de assumir que todos os terminais e consoles modernos terão suporte a um conjunto básico de recursos de formatação e colorização – o que é uma aposta bastante segura, mas pode ter exceções em terminais incomuns.
Atualização em 5.5.2025: Removida a dependência referente ao comando externo basename.
8 - Como consultar a versão do Bash?
R. Para saber qual a versão do bash disponível e configurado para uso no seu ambiente, use o comando bash --version.
Caso tenha dúvida se o seu script está usando a mesma versão do Bash acessível no seu ambiente interativo, há muitas formas de verificar – por exemplo, você pode checar as variáveis de ambiente $BASH_VERSION e $SHELL na inicialização do seu script, durante a sua fase de debug, para ter certeza.
Atualmente (maio de 2025) eu uso sistemas mantidos por 3 organizações diferentes, e em todos eles a versão do Bash é 5.x (mais especificamente: 5.2.37, 5.2.15 e 5.1.16). Em todas elas, a resposta do comando bash --version é algo similar a:
GNU bash, versão 5.2.37(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2022 Free Software Foundation, Inc.
Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html>.
9 - Por que a versão do Bash no meu computador é tão antiga?
R. Provavelmente você usa um sistema operacional de uma versão antiga – ou uma versão moderna dos sistemas operacionais da Apple. E, também provavelmente, deve ser possível instalar uma versão mais moderna do Bash no seu ambiente, se você tiver acesso pleno ao sistema – consulte a documentação dele!
No caso específico dos Macs, a Apple não gosta dos termos de licenciamento das versões modernas do Bash, por isso distribui até hoje uma versão do Bash 3.x, cujos recursos são os mesmos desde 2007 – lamentável! Além disso, ela mudou sua shell padrão, para não ser mais o Bash.
Há várias formas de instalar o Bash 5.x no Mac, a minha preferida é usando o pacote Bash do gerenciador de pacotes Homebrew – mas é bom fazer isso após ter consultado documentação específica, pois o pleno sucesso da operação talvez exija depois incluir uma linha no arquivo /etc/shells e rodar o comando chsh com os parâmetros adequados ao seu caso - na dúvida, consulte o responsável pelo suporte ao seu ambiente!
10 - Como usar bibliotecas em scripts shell?
R. Você deve inclui-las usando o comando source (por exemplo: source libtrilux.sh e a partir daí as funções e estruturas definidas nela ficam disponíveis para uso no seu script.
O help da própria biblioteca ('./libtrilux.sh -h') mostra mais exemplos disso, e o cabeçalho do script de apoio test_libtrilux.sh, distribuído junto com a biblioteca, demonstra uma rotina de carregamento da biblioteca que a procura, sucessivamente, no $PATH, no diretório em que o script chamador está instalado, no diretório corrente do momento da chamada, ou ainda com o nome alternativo da versão de desenvolvimento (que é 'libtrilux-devel.sh'), e carrega a ÚLTIMA que encontrar, entre estas.
Dica: Para saber mais sobre o comando source, digite (no Bash) o comando help source.
11 - Fazer uma nova biblioteca básica para shell scripts não é reinventar a roda?
R. Sim, e gostei muito da minha nova roda, sob medida pra minha demanda!
Mas neste caso, tem mais motivos: a biblioteca que eu usava até o início de 2025 tinha sido escrita na época do Bash 2.x, quando meu dia a dia ainda envolvia rodar meus scripts também em contas de AIX e HP-UX, e por isso ela era compatível com a shell Posix e fazia muitas coisas chamando utilitários externos.
Assim, substituí-la por funções internas (builtin) do Bash, e aproveitar os confortos do Bash 5.x, me trouxe ganhos diretos - mesmo nos casos em que as rotinas dela agora passaram a ser mera chamada para recursos e operações que o Bash implementa diretamente, mas eu estou acostumado a chamar por outros nomes e formas desde o século XX...
12 - Eu não poderia fazer a mesma coisa com meia linha da linguagem XYZ?
R. Provavelmente sim, e tenho certeza que você se divertiria no processo.
13 - Eu não poderia fazer a mesma coisa com o bash diretamente, ou com a biblioteca XYZ?
R. Provavelmente sim (ao menos quase tudo), e acho que você deveria tentar, porque é divertido!
14 - Você chegou a testar a ferramenta Tal?
R. Provavelmente não, o que não quer dizer que ela não me atenderia, ou não lhe atenderia.
15 - Por que eu deveria usar a libtrilux, e não outra biblioteca?
R. Provavelmente você deveria usar a biblioteca de sua preferência. Tem grande variedade de bibliotecas boas, e várias delas sobrepõem funcionalidades da libtrilux. Para ver uma lista, visite esta coleção do dberkholz.
16 - Por que a libtrilux não tem o recurso Tal?
R. Provavelmente eu não preciso dele, ou ele ainda consta na minha lista de pendências (quando publiquei esta FAQ originalmente, os principais pontos na lista de pendências envolvem lidar com limitações de terminal, com saídas para o syslog, com tratamento das situações em que stdout não é um terminal, com validação de entradas, e com tratamento de situações em que as funções venham a ser chamadas pelo usuário com parâmetros incorretos).
Como a libtrilux é open source, os interessados poderão incluir os recursos adicionais que quiserem usar, se existirem e desejarem.
17 - Posso implantar o recurso TAL na libtrilux?
R. Sim, se desejar. Ela é open source. Faça um fork, cumpra os requisitos da licença, e divirta-se.
18 - Você vai inserir na sua versão o novo recurso que eu adicionar no meu fork?
R. Não sei, mas isso não deveria ser motivo para você adicionar, ou deixar de adicionar – adicione o que você desejar usar.
19 - Como posso te enviar a modificação que eu fiz?
R. Caso você deseje me enviar, a minha preferência é que você envie a descrição e um diff com seu código para o e-mail augusto@augustocampos.net, mas não posso me comprometer a analisá-lo ou incorporá-lo à minha versão.
20 - Por que você não implementou a libtrilux de tal outra forma, ou com tal outro recurso, ou para tal outra shell?
R. Eu a criei com uma finalidade específica, e ela a atende. Haveria muitas outras formas possíveis de implementar, e tenho certeza de que não será difícil encontrá-las em outras ferramentas, caso você não queira implementar pessoalmente ou fazer a adequação necessária.
21 - Por que você não colocou a libtrilux no repositório Tal ou no serviço on-line XYZ?
Eu sou à moda antiga e gosto de disponibilizar código no meu próprio servidor, em arquivos .tar.gz.
22 - Por que o recurso X da libtrilux não funciona na minha máquina?
R. O mundo da shell é vasto, e a minha capacidade de testar esta biblioteca fora dos meus próprios equipamentos e sistemas é limitadíssima ou mesmo inexistente. Mas a libtrilux é open source e você mesmo pode investigar a causa, se desejar!
23 - Por que a libtrilux não funcionou no meu ambiente?
Difícil saber sem conhecer o seu ambiente! Mas verifique se a sua versão do Bash é superior a 5.0 (veja a pergunta específica, nesta mesma FAQ), e use as mensagens de erro e as saídas do comando ./test_libtrilux.sh -v para dar início à sua investigação.
24 - A libtrilux pode ser usada em situações com requisitos de segurança?
Não recomendo - assim como não recomendaria nenhuma biblioteca desse estilo. Contextos de segurança (com privilégios elevados, acesso a dados e arquivos sensíveis, etc.) demandam escopos restritos e redução da base de código, além de auditoria suficiente e verificação que possa assegurar os parâmetros recebidos e dados tratados.
25 - Onde posso aprender mais sobre os recursos novos do Bash 5?
O Bash vem numa trajetória de evolução a partir da sua versão 4, revolucionando muita coisa que surpreende positivamente quem aprendeu a criar scripts nas versões 2.x e 3.x (ao custo de oferecer ao desenvolvedor cada vez mais formas de reduzir a compatibilidade com a shell Posix).
Para aprender sobre essa nova realidade da shell eu sugiro – além da documentação oficial do Bash, do Scripting Field Guide, da coleção de links do Awesome Shell, e de sites e livros em português que dão uma boa visão geral sobre a shell – dois livros específicos: Bash Idioms (Albing e Vossen, O'Reilly, 2022) e a segunda edição do Bash Pocket Reference (Robbins, O'Reilly, 2 ed., 2016).
O primeiro deles é volumoso e oferece a todos os interessados uma visão prática e atualizada sobre o que o Bash moderno traz, e o segundo, embora não seja tão recente (mas já é posterior ao Bash 4), é conciso e oferece a quem já conhecia as versões anteriores um referencial sobre como são as opções modernas da shell.
Além disso, Chet Ramey (o mantenedor do Bash) disponibiliza um arquivo NEWS contendo as principais novidades de cada versão.