(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.
.bash
extensão. Além disso, é política do Debian ter scripts em pacotes que aterram em uma dasbin
pastas para não ter extensões.Respostas:
Se você não usar um intérprete explicitamente, o intérprete que está sendo chamado é determinado pelo
shebang
usado 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 é.Veja, a
.py
extensão do script bash não o torna um script python.É sempre um
bash
script.fonte
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 scriptname
para descobrir qual é o arquivo, se eu quiser saber disso.Portanto, se você deseja que seu script seja executado
bash
, use#!/bin/bash
como a primeira linha.fonte
.sh
extensã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.sh
extensão, seria apenas ser confuso.)#!/usr/bin/env bash
para portabilidade, discutida aqui stackoverflow.com/a/10383546/54964