Devo salvar meus scripts com a extensão .sh?

66

Eu tenho alguns scripts funcionais e quero copiar para eles /usr/bin, quero usá-los como comandos normais do terminal. É uma boa prática usá-los com a .shextensão ou posso salvá-los sem extensão?

Patterson
fonte
6
Além disso, se você deseja que esses scripts estejam disponíveis para todos os usuários, /usr/local/binpode ser uma escolha melhor.
Salem
6
O @Salem /usr/bine /usr/local/binambos devem estar disponíveis para todos os usuários, mas /usr/local/biné melhor para executáveis ​​que não fazem parte dos pacotes.
Gerrit
O único benefício que vi é que editores como o vim ou o nano sabem como destacar desde o início, e é isso.
Rath
11
@rath Recebo destaque de sintaxe sem a extensão se tiver o shebang definido como #!/usr/bin/env bashou #!/bin/bash.
Sparhawk 27/07
@Sparhawk Na verdade, mas eu muitas vezes esquecem-lo até que eu tento executar o script;)
Rath

Respostas:

71

Não, não é uma boa prática, você deve manter seus scripts sem extensão. Observe que os scripts que fazem parte dos pacotes não possuem uma extensão .sh , ou seja, update-grub , não update-grub.sh . Se você ainda não está convencido, saiba que o Guia de estilos do Google Shell diz:

Os executáveis ​​não devem ter extensão (fortemente preferida) ou extensão .sh. As bibliotecas devem ter uma extensão .sh e não devem ser executáveis.

PS Você não precisa colocar seu script /bin. Você pode criar um diretório ~/bine colocar seu script lá. O diretório ~/biné incluído $PATHpor padrão, portanto, os scripts colocados lá podem ser executados como qualquer outro comando do shell.

Comunidade
fonte
4
"O diretório ~ / bin está incluído $PATHpor padrão" - Desde quando? Enfim, ~/.local/biné provavelmente uma escolha melhor, pois é um padrão.
nyuszika7h
11
Você quer dizer "As bibliotecas devem ter uma extensão .so", certo? Não é sh.
21414 Keith Wolters
3
@ KeithWolters primeiro, não eu, mas o Google. Segundo, .sh, não. Então, estamos falando de scripts de shell, não de binários.
11
O guia de estilo do Google é muito específico para o Google. Por exemplo, "Bash é a única linguagem de script de shell permitida para executáveis". Claramente, uma regra interna e não as melhores práticas.
Paul Draper
11
@ nyuszika7h confira ~ / .profile ... ele insere $ HOME / bin em seu caminho, se existe o diretório
Corey Goldberg
9

Eu recomendo a recomendação de uso ~/binque é automaticamente adicionada ao seu $PATH, como disse Sergey . Ou /usr/local/bin, que já pode estar no PATH. Contudo:

  • Você está fazendo isso por si mesmo. Use o que você se sentir confortável. Na verdade, eu diria que mantenha a extensão para que você seja lembrado de que seu script está sendo executado, pois -
  • Extensões são incomuns /usr/bin. No meu sistema, posso encontrar apenas dois:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh

    Portanto, se você estiver empacotando, definitivamente deixe de fora a extensão.

muru
fonte
2
~/biné adicionado $PATHautomaticamente, se existir, não é necessário adicioná-lo manualmente. Basta criar o diretório, sair e fazer login novamente.
Sergey
5

Basta colocar a seguinte linha no topo do arquivo:

#!/bin/bash

O arquivo será automaticamente digitado: Shell Script sem qualquer extensão!

Lembre-se de dar permissão de execução ao arquivo.

Para colocar o script para que possa ser executado por comando direto, visite: Onde devo colocar meu script para poder executá-lo por um comando direto?

Pandya
fonte
2
Ou até mesmo #! / Bin / sh se você não precisar do shell bash completo.
Flickerfly 29/07
Muitos ligação OSs / bin / sh e / bin / bash
Max Coplan