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

34

(Veja Use #! / bin / sh ou #! / bin / bash para compatibilidade com o Ubuntu-OSX e facilidade de uso & POSIX )

Se eu quiser que meus scripts usem o shell bash, usar a extensão .bash realmente invocará o bash ou dependerá da configuração do sistema / 1st shebang line. Se ambos estivessem em vigor, mas diferentes, qual teria precedência?

Não tenho certeza se termino meus scripts com .sh para indicar apenas "shell script" e depois a primeira linha seleciona o shell bash (por exemplo, #!/usr/bin/env bash ) ou se apenas terminá-los com .bash (como bem como a configuração da linha 1). Quero que o bash seja invocado.

    
por Michael Durrant 04.02.2015 / 14:37

2 respostas

19

does using the .bash extension actually invoke bash or does it depend on system config / 1st shebang line.

Se você não usar um interpretador explicitamente, o interpretador que está sendo chamado será determinado pelo shebang usado no script. Se você usa um intérprete especificamente, o intérprete não se importa com a extensão que você dá para o 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, .py extension para o script bash não faz dele 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 script bash .

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script
    
por 04.02.2015 / 15:15
20

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

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

Eu pessoalmente não me importo se um script é sh, bash, perl, seja o que for, então eu apenas o nomeio para o que ele faz; Eu acho adicionando uma extensão redundante. Eu vou fazer file scriptname para descobrir o que é o arquivo se eu quiser saber disso.

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

    
por 04.02.2015 / 14:41