No Linux e em outros sistemas semelhantes ao Unix, você tem várias opções de shells.
O shell é responsável não apenas por desenhar o seu pequeno prompt, mas também por interpretar seus comandos, especialmente se você colocar uma lógica complicada como pipes, condicionais e assim por diante.
bash é o shell mais comum usado como shell padrão para usuários de sistemas Linux . É um descendente espiritual de outros shells usados em toda a história do Unix. Seu nome, bash é uma abreviatura de Bourne-Again Shell, uma homenagem ao shell Bourne que foi projetado para substituir, embora também incorpore recursos do C Shell e do Korn Shell.
Ele é executado, atualmente, em /bin/bash
- qualquer sistema com o bash o terá acessível aqui.
Não são apenas os usuários que usam shells, no entanto. Scripts ( shell scripts ) precisam de shells para interpretá-los. Quando você executa um script de shell, seu sistema precisa iniciar um processo de shell para executar seu script.
O problema é que shells diferentes têm pequenas inconsistências entre eles, e quando se trata de executar scripts, isso pode ser um problema real. O
bash tem muitos recursos de script que são exclusivos apenas para o bash, e não para outros shells. Tudo bem, se você sempre usará o bash para rodar esses scripts. Outros shells podem tentar emular o bash, ou aderir ao padrão POSIX, que o bash suporta muito bem (embora adicione suas próprias extensões).
É possível especificar no topo de um script de shell que shell ele deve ser executado usando um shebang. Um script pode especificar #!/bin/bash
na primeira linha, o que significa que o script deve sempre ser executado com o bash, em vez de outro shell.
/ bin / sh é um executável representando o shell do sistema . Na verdade, geralmente é implementado como um link simbólico apontando para o executável para qualquer shell que seja o shell do sistema. O shell do sistema é o tipo de shell padrão que os scripts do sistema devem usar. Nas distribuições do Linux, por um longo tempo isso era geralmente um link simbólico para bash , tanto que se tornou uma convenção sempre ligar / bin / sh para bash ou um shell compatível com bash . No entanto, nos últimos dois anos, o Debian (e o Ubuntu) decidiram mudar o shell do sistema de bash para dash - semelhante quebra de shell com uma longa tradição no Linux (bem, GNU) de usar o bash para / bin / sh. O Dash é visto como um shell mais leve e muito mais rápido, que pode ser benéfico para a velocidade de inicialização (e outras coisas que exigem muitos scripts de shell, como scripts de instalação de pacotes).
O Dash é bastante compatível com o bash, baseando-se no mesmo padrão POSIX. No entanto, ele não implementa as extensões específicas do bash. Existem scripts que usam #!/bin/sh
(o shell do sistema) como seu shebang, mas que requerem extensões específicas do bash. Este é atualmente considerado um bug que deve ser corrigido pelo Debian e pelo Ubuntu, que requerem que / bin / sh seja capaz de funcionar quando apontado para dash.
Mesmo que o shell do sistema do Ubuntu esteja apontando para dash, seu login shell como um usuário continua sendo o bash neste momento. Ou seja, quando você efetua login em um emulador de terminal em qualquer lugar no Linux, seu shell de login será bash. A velocidade de operação não é tanto um problema quando o shell é usado interativamente, e os usuários estão familiarizados com o bash (e podem ter personalizações específicas do bash em seu diretório inicial).
O que você deve usar ao escrever scripts
Se o seu script requer recursos suportados apenas pelo bash, use #!/bin/bash
.
Mas, se possível, seria bom certificar-se de que seu script é compatível com POSIX, e use #!/bin/sh
, que deve sempre, de maneira confiável, apontar para o shell de sistema compatível com POSIX em qualquer instalação. / p>