Qual é a diferença entre usar bash e sh para executar um script?

3

O bash e o sh executam um script de maneira diferente? Eu executei um script de shell com bash e sh e obtive a mesma saída. Então qual é a diferença?

Além disso, quando você apenas executa ./executable , ele usa bash ou sh?

    
por Rohan 20.03.2016 / 02:11

2 respostas

7

Isso depende do sistema que você está executando. Um grande número de sistemas operacionais, especialmente os baseados em Linux, sh é um link para bash .

Nesse caso, ainda existem algumas diferenças no comportamento em que bash tenta ser mais parecido com o tradicional bourne shell quando chamado sh , mas ainda aceita a maioria dos bashisms.

Em alguns outros sistemas operacionais, como os baseados no Debian, sh é fornecido por dash , não bash . Isso faz uma diferença muito maior, pois dash não suporta bashisms, sendo projetado para ser uma implementação de shell POSIX limpa.

Em sistemas operacionais proprietários, sh geralmente é fornecido por um ksh88 compatível com POSIX, que, como dash , não implementa bashisms. No Solaris 10 e mais antigo, dependendo do seu PATH, sh provavelmente será um shell Bourne legado, anterior ao POSIX.

Em qualquer caso, você provavelmente obteve a mesma saída com seu teste, simplesmente porque seu script não estava usando nenhum comando, opção ou sintaxe específicos do bash .

Quando você executa ./executable , qual shell será executado depende essencialmente do shebang escrito no início do script .executable. Isso será bash se o shebang especificar:

#!/bin/bash
....

Se não houver shebang e você chamar o script de um shell compatível com POSIX, o script deve ser tecnicamente executado pela primeira sh encontrada no PATH. Muitos interpretadores de shell como bash , dash e ksh estão se considerando POSIX, então interpretarão o script. Observe que a variável de ambiente SHELL não é usada aqui.

    
por 20.03.2016 / 02:44
2

Sim, pode ser, mas não precisa ser. As duas conchas não são iguais, mas os básicos são compatíveis. Verifique este post para obter mais detalhes.

Você pode usar a seguinte linha em um script para verificar o interpretador usado:

ps h -p $$ -o args='' | cut -f1 -d' '

Você pode especificar explicitamente o shell que deve ser usado quando o script é executado diretamente com a linha sheebang :

#!/bin/sh

ou

#!/bin/bash
    
por 20.03.2016 / 03:00

Tags