Usar extensão .sh ou .bash para scripts bash?


36

(Consulte Use #! / Bin / sh ou #! / Bin / bash para compatibilidade com Ubuntu-OSX e facilidade de uso e POSIX )

Se eu quiser que meus scripts usem o shell bash, o uso da extensão .bash realmente chama o bash ou depende da configuração do sistema / 1ª linha shebang. Se ambos estivessem em vigor, mas diferentes, qual teria precedência?

Não tenho certeza se devo terminar meus scripts com .sh para indicar apenas "shell script" e, em seguida, fazer com que a primeira linha selecione o bash shell (por exemplo #!/usr/bin/env bash) ou se deve finalizá-los apenas com .bash (assim como a configuração da linha 1 ) Eu quero que o bash seja invocado.


3
Acho que nunca vi uma .bashextensão. Além disso, é política do Debian ter scripts em pacotes que aterram em uma das binpastas para não ter extensões.
muru

Respostas:


19

usando a extensão .bash realmente chama o bash ou depende da configuração do sistema / 1ª linha shebang.

Se você não usar um intérprete explicitamente, o intérprete que está sendo chamado é determinado pelo shebangusado no script. Se você usar um intérprete especificamente, ele não se importa com a extensão que você dá ao seu script. No entanto, a extensão existe para tornar muito óbvio para os outros que tipo de script é.

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

Veja, a .pyextensão do script bash não o torna um script python.

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

É sempre um bashscript.

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script

23

A nomeação do script não tem nada a ver com a forma como é executado.

A linha shebang define qual intérprete é usado para executar o script.

Pessoalmente, não me importo se um script é sh, bash, perl, qualquer que seja o nome, apenas o nome para o que ele faz; Acho que a adição de uma extensão é redundante. Eu farei file scriptnamepara descobrir qual é o arquivo, se eu quiser saber disso.

Portanto, se você deseja que seu script seja executado bash, use #!/bin/bashcomo a primeira linha.


4
Além disso, se a escolha da implementação do script mudar (digamos, que foi reescrita em Python, Perl, C ...), não ter uma .shextensão -style significa que não há necessidade de renomeá-lo. (É certo que não há nada impedindo que um programa C produzindo um binário com um .shextensão, seria apenas ser confuso.)
Stephen Kitt

2
Use #!/usr/bin/env bashpara portabilidade, discutida aqui stackoverflow.com/a/10383546/54964
Léo Léopold Hertz 준영

4
@wurtel (comentário tardio, OK?) A adição de uma extensão imho está longe de ser redundante. A maioria dos editores oferece suporte a realce de sintaxe com base na extensão, além de fazer sentido ter visibilidade imediata do tipo de arquivo. Clareza e readabiidade importam muito.
precisa saber é o seguinte

@RolfBly: Os editores que eu uso reconhecem o shebang e fornecem destaque de sintaxe. A clareza é útil, mas na maioria das vezes queremos executar um comando e é bom que eu tenha que digitar menos e se não preciso me lembrar da linguagem de implementação.
Hontvári Levente
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.