Migrar de scripts Bash para scripts Python na administração de…

… sistemas: faz sentido? Embora reconheça que os scripts escritos para Bash (ou shell scripts, se preferir) sejam bastante úteis para a automação de tarefas administrativas em sistemas GNU/Linux, na prática não sou muito fã da utilização deste recurso. O principal motivo disto está na necessidade de prepará-los para lidar com as particularidades da distribuição em uso, tendo as suas variáveis e pendências satisfeitas. Por isto, é fundamental criar rotinas de testes de sanidade, as quais fazem uma verificação inicial antes de executá-los…

“I have used bash scripts for years because they are ubiquitous and fast to prototype. Over time, my small helpers turned into a tangle of chained commands and fragile pipes. I finally decided to migrate everything to Python to see whether the maintenance headaches would ease. I expected a few niceties, maybe better error messages, and not much else. What I got was a fundamental change in how I write and reason about my tools.”

— by XDA Developers.

Jeff Butts (editor do portal XDA Developers) também partilhou a sua experiência de transição de scripts Bash para Python, detalhando as razões e os resultados desta mudança. Embora eles tenham sido a sua escolha para a prototipagem rápida, com o tempo estes scripts tornaram-se complexos e difíceis de manter, uma vez que eles se transformaram numa teia de comandos encadeados e pipes frágeis, além da depuração ter se tornado uma tarefa árdua. Por fim, a portabilidade também se tornou um problema, pois as flags de ferramentas tradicionais variavam entre as diferentes distribuições Linux. A gestão de erros em Bash era mínima e o registo inconsistente, dificultando a identificação da causa principal dos problemas.

A mudança para Python trouxe melhorias significativas, sob vários aspectos. O código tornou-se mais legível e fácil de manter e em vez de cadeias de texto, os dados passaram a ser objetos e dicionários com tipos bem definidos, além das bibliotecas “com pilhas incluídas” do Python terem substituído a necessidade de múltiplos comandos externos. A gestão de erros foi reforçada com blocos try e except, e o registo tornou-se mais estruturado e consistente. Butts destacou ainda a facilidade de testar o código em Python com frameworks como o pytest, o que levou a uma equipa mais colaborativa e confiante.

No entanto, a migração não foi isenta de desafios. O programador notou que os scripts em Python tinham um tempo de arranque superior em comparação aos scripts em Bash, o que foi uma incômoda surpresa. A gestão de dependências também introduziu algum atrito, exigindo a padronização de ambientes virtuais e a fixação de versões para evitar desvios. Foi ainda necessário tornar explícitos em Python muitos dos comportamentos que estavam implícitos nos scripts em Bash, um processo que embora seja tedioso, se revelou necessário.

No gera, Butts considera que a mudança para Python foi positiva e que faria a mesma escolha novamente. Embora a migração tenha tido os seus overheads, os ganhos em legibilidade, capacidade de teste e gestão de erros compensaram largamente o esforço. Ele destaca que a escolha entre Bash e Python depende das necessidades específicas de cada projeto. Para scripts pequenos e que raramente são alterados, o Bash continua a ser uma boa opção. No entanto, para scripts maiores e mais complexos, o Python (definitivamente) é a melhor alternativa.

E olha que nestes últimos tempos, eu raramente faço scripts em Bash… &;-D