Até agora, estamos fazendo todos os nossos scripts com o Bash, mas estou começando a me sentir um pouco bobo. Embora possamos, obviamente, fazer tudo o que queremos com o Bash (é bastante poderoso), estou começando a me perguntar se não devemos usar uma linguagem de script adequada (no nosso caso, provavelmente Ruby).
Como você decide quando usar Perl / Python / Ruby sobre Bash para um script? Não acho que um script init com Ruby faça sentido, mas que tal um script um pouco mais longo que adicione contas de email?
Respostas:
Dado um problema que ambos podem resolver, convém usar o que você mais se sentir confortável. Por fim, existem muitos pequenos detalhes e apenas a experiência pode ensiná-lo a vê-los.
O Bash é uma linguagem de script de uso geral, como Python, Ruby, Perl, mas cada uma possui pontos fortes diferentes do restante. Perl se destaca na análise de texto, o Python afirma ser o mais elegante do grupo, os scripts Bash são excelentes para "entender", se você entende o que quero dizer, e Ruby ... bem, Ruby é um pouco especial em muitos aspectos de maneiras.
No entanto, as diferenças entre eles só importam quando você tem uma boa experiência em scripts. Sugiro que você escolha um idioma e coloque-o nos limites antes de passar para o próximo. Você pode fazer muito em um script de shell, mais do que a maioria das pessoas admitiria. Qualquer idioma é tão difícil quanto você deseja. Depois de escrever algumas coisas, todo idioma é "fácil" para você.
Estar familiarizado com o shell compensa rapidamente se você mora no Linux, então talvez você queira começar com isso. Se você encontrar uma tarefa impossível ou impraticável para resolver em um script de shell, use outra coisa.
Além disso, lembre-se de que aprender scripts de shell é muito simples. O verdadeiro poder disso reside em outros programas, como awk, sed, tr, et al.
fonte
TL; DR - use o bash apenas para instalar um idioma melhor (se ainda não estiver disponível); caso contrário, você estará perdendo um tempo humano irrecuperável e precioso. Se você não pode fazê-lo na linha de comando manualmente, sem erros, não faça scripts com o bash / shell.
É 2015, então eu consideraria o seguinte:
sobrecarga de memória
hora de inicialização
desempenho
produtividade
Acho que não há razão para usar o Bash / Shell se você tiver o Ruby / Python instalado.
E provavelmente instalar o Ruby / Python nem sequer precisa de um script bash (com exceção do busybox, algumas ferramentas do sistema dependem da presença do Python / Perl).
E toda vez que você escreve um script de shell, está "praticando" fazendo exatamente isso - em vez de aprender algo mais poderoso / produtivo.
Por que as pessoas usam o Bash hoje em dia? Porque é um hábito terrível e difícil de quebrar. Um script raramente é "terminado para sempre" após os primeiros minutos - não importa o quão fortemente as pessoas pensem dessa maneira. Juntamente com a falácia "é o último bug deste script".
Conclusão: use o bash / shell somente quando estiver absolutamente forçado a (como o
~/.bashrc
busybox), porque quase nunca é "a ferramenta certa para o trabalho" hoje em dia.fonte
Uso o bash quando meu foco principal é o manuseio de arquivos. Isso pode incluir mover, copiar e renomear arquivos, além de usar arquivos como entrada para outros programas ou armazenar a saída de outros programas em arquivos. Eu raramente escrevo código bash que realmente examina o conteúdo de um arquivo ou gera a saída para gravar em um arquivo; Deixo isso para os outros programas (que posso escrever em Perl ou python) que inicio via bash.
Uso Perl e python quando meu foco principal é ler dados de arquivos, processar esses dados de alguma maneira e gravar a saída em arquivos. Se eu me encontrar usando (em Perl) o
system
comando, back ticks ou (em python) osubprocess
módulo muito extensivamente, considero escrever o script no bash. Por outro lado, às vezes começo a adicionar tanta funcionalidade a um script bash que, eventualmente, faz mais sentido reescrevê-lo em Perl / python, em vez de lidar com o suporte limitado (por comparação) do bash para escopo de variáveis, funções, estruturas de dados, etc. .fonte
=~
operador apoiado por[[ ]]
eu ter sido me amar algum Bash para simples leitura de arquivosGosto dos critérios estabelecidos nesta postagem do blog .
fonte
Achei essa análise Perl versus Bash útil ...
http://blogs.perl.org/users/buddy_burden/2012/04/perl-vs-shell-scripts.html
Por conveniência, estou copiando um resumo do autor 1) quando bash é uma descoberta melhor e 2) quando perl é uma conclusão melhor ...
Quando Bash é melhor ...
Quando Perl é melhor ...
fonte
fail "error" unless system("foobar")
).Na minha experiência, bash versus python é uma troca entre tempo de desenvolvimento e flexibilidade. Uma solução rudimentar para um problema geralmente pode ser estabelecida em um script bash mais rapidamente do que em um script python.
O Python tenderá a fazer você pensar mais sobre a estrutura da sua solução do que o script bash equivalente. O Python tem um poder mais expressivo do que um script bash e, portanto, tende a escalar e modificar melhor ao longo do tempo. Também permanece mais legível em geral.
O Bash está mais próximo do sistema de arquivos e pode ser ótimo para as primeiras soluções de rascunho para problemas que NÃO estão bem definidos. Por esse motivo, um script bash pode ser uma boa primeira opção para prototipar algo com a intenção total de portá-lo para python, uma vez que o problema seja melhor compreendido.
fonte
Bash é um shell Unix que inclui uma linguagem de script. É bastante processador de comando. você controla a maneira como executa comandos, na verdade os executa.
Perl / Ruby / Python são linguagens de uso geral.
Quando você deseja um script de shell, usa o Bash
Se você deseja uma tarefa mais complexa ou não relacionada ao shell. Use Python etc.
Eu nunca compararia esses idiomas, na verdade. Python etc. são portáteis. Você pode executá-los em qualquer lugar. O Bash é apenas para Unix.
O Python etc. tem toneladas de bibliotecas reutilizáveis, resolvendo milhões de tarefas.
É quase o mesmo se você perguntar. "Quando usar o Paint e quando usar o Photoshop"
Para processar e-mails, eu usaria o Ruby novamente, porque ele possui muitas bibliotecas reutilizáveis.
Mas a melhor maneira seria combinar bash e ruby. Isso seria correto. Como se você criasse um script de processamento de email em ruby, o script bash invocaria esse script ruby e executaria outros ds commans.
Portanto, sempre que você precisar de um processador de comando, use o bash. Você executa comandos unix e os controla.
ATUALIZAÇÃO após 7 anos (mar 2019)
Embora a parte principal da minha resposta não tenha mudado, gostaria de salientar isso.
O Bash também é uma linguagem de script poderosa. Para o processamento de texto, pode ser uma escolha legítima absoluta.
Por favor, leia os comentários de mkaito abaixo. Todos eles são completamente verdadeiros.
fonte
Scripts de shell como bash, ksh, zsh, sh e fish são notoriamente surpreendentes, em comparação com linguagens de alto nível de uso geral como Ruby, Python ou Perl. Embora um script de shell possa começar sua vida como um arquivo mais curto que o script de uso geral equivalente, as surpresas levam a muitos códigos de quebra defensivos, como
set -euo pipefail
habilitar modos estritos.Por exemplo, a maioria dos idiomas de shell continua executando linhas em um script de shell, mesmo quando um dos comandos falha. Por outro lado, uma linguagem de propósito geral falha imediatamente no primeiro erro e, muitas vezes, carregada, resultando em um comportamento mais seguro e previsível em scripts de complexidade ainda mais leve.
fonte
Artigo altamente tendencioso.
Não acho que o bash seja tão difícil de depurar. O Python geralmente é muito rígido, enquanto o bash permite que você seja muito criativo. Se você é um bom pensador pronto para usar, vai gostar do bash.
Eu executo scripts bash em milhões de leituras de seqüenciamento de DNA em milhares de arquivos, e isso me serve muito bem. E, ao contrário do que todo mundo diz, as mesmas versões dos scripts em C ++ não são executadas muito mais rapidamente (em alguns minutos, separe-as).
Eu acho que o bash, como o perl, não é o mais amigável / fácil de ler. Isso assusta as pessoas, porque muitas pessoas não são grandes pensadoras abstratas. Porém, programadores mais brilhantes e criativos tendem a adorar e fazer uso frequente. Se você se conhece e sabe que tem um cérebro, não se assuste com a festança. Se você é um pensador básico, talvez se apegue a algo como Python. Para cada um deles.
fonte
No "Livro da Lhama",
fonte
Como regra geral, use o idioma mais simples que tenha um desempenho bom o suficiente para sua tarefa em mãos. E suas particularidades apenas na medida em que são realmente úteis.
E quanto à legibilidade, o Bash é horrível se seu estilo de programação é horrível. Se você simplesmente jogar código por lá, ele se torna obscuro.
Mas se você dividir o código nas funções mais curtas e nomear as coisas de uma maneira simples e compreensível, é a linguagem mais clara que você pode encontrar. Porque é muito conciso.
Como amostra, este é o meu código mais recente no Bash. Observe como é fácil entender e digitar:
fonte