Qual é a diferença entre #!/ bin / sh e#!- bin / bash?

em Linux e outros sistemas Unix-like você tem uma escolha de várias conchas.

a shell é responsável não só por desenhar o seu pequeno prompt, mas interpretar os seus comandos, especialmente se você colocar em lógica complicada como tubos, condicionalismos e assim por diante.

bash é o shell mais comum usado como uma shell padrão para usuários de sistemas Linux. É um descendente espiritual de outras conchas usadas ao longo da história do Unix. Seu nome, bash é uma abreviação de Bourne-Again Shell, uma homenagem ao Bourne shell que foi projetado para substituir, embora também incorpore características do C Shell e do Korn Shell.

é executado, hoje em dia, a partir de /bin/bash – qualquer sistema com bash o terá acessível aqui.No entanto, não são apenas os utilizadores que usam cartuchos. 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 conchas diferentes têm pequenas inconsistências entre elas, e quando se trata de executar scripts, estes podem ser um problema real. bash tem um monte de recursos de scripting que são únicos apenas para bash, e não para outras conchas. Tudo bem, se vais usar sempre o bash para gerir os Guiões. Outras conchas podem tentar emular bash, ou aderir ao padrão POSIX, que bash suporta muito bem (embora adicione suas próprias extensões).

é possível especificar no topo de um script shell com qual shell ele deve ser executado usando um shebang. Um script pode especificar #!/bin/bash na primeira linha, o que significa que o script deve ser sempre executado com bash, em vez de outra shell.

/bin / sh é um executável que representa a shell do sistema. Na verdade, ele é 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 scripts do sistema devem usar. Em distribuições Linux, por um longo tempo este foi geralmente um link simbólico para bash, tanto que se tornou um pouco de uma convenção para sempre link /bin/sh para bash ou uma shell compatível com bash. No entanto, nos últimos anos, o Debian (e o Ubuntu) decidiram mudar a shell do sistema de bash para dash – um shell semelhante – rompendo com uma longa tradição no Linux (bem, GNU) de usar bash para /bin/sh. Dash é visto como um shell mais leve, e muito mais rápido, que pode ser benéfico para a velocidade de arranque (e outras coisas que requerem um monte de scripts shell, como scripts de instalação de pacotes).

Dash é bastante compatível com bash, sendo baseado no mesmo padrão POSIX. No entanto, não implementa as extensões específicas da bash. Existem scripts em existência que usam #!/bin/sh (a 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 Ubuntu, que requerem /bin/sh para ser capaz de trabalhar quando apontado para o dash.

embora a shell do sistema do Ubuntu esteja a apontar para dash, a sua shell de login como utilizador continua a ser bash neste momento. Isto é, quando você faz login em um emulador de terminal em qualquer lugar do Linux, sua shell de login será bash. A velocidade da 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 pessoal).

o que você deve usar ao escrever scripts

se seu script requer recursos suportados apenas por bash, use #!/bin/bash.

mas se for possível, seria bom ter certeza de que seu script é compatível com POSIX, e usar #!/bin/sh, o que deve sempre, de forma bastante confiável, apontar para a linha de comandos de Sistema compatível com POSIX em qualquer instalação.

Deixe uma resposta

O seu endereço de email não será publicado.