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

52

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

    
por Patterson 27.07.2014 / 00:48

3 respostas

63

Não, não é uma boa prática, você deve manter seus scripts sem extensão. Note que os scripts que fazem parte dos pacotes não têm uma extensão .sh , ou seja, update-grub , não update-grub.sh . Se você ainda não estiver convencido, então seja avisado que o Guia de estilo do Google Shell diz:

  

Os executáveis não devem ter nenhuma extensão (strongmente preferida) ou uma 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 em /bin . Você pode criar o diretório ~/bin e colocar seu script lá. O diretório ~/bin é incluído em $PATH por padrão, portanto, os scripts colocados lá podem ser executados como qualquer outro comando shell.

    
por user280493 27.07.2014 / 01:00
8

Eu sigo a recomendação para usar ~/bin , que é automaticamente adicionado ao seu $PATH , como Sergey disse. Ou /usr/local/bin , que talvez já esteja no PATH . No entanto:

  • Você está fazendo isso por si mesmo. Use o que você se sentir confortável com. Na verdade, eu diria manter a extensão para que você seja lembrado de que é o seu script que você está executando, desde -
  • Extensões são incomuns em /usr/bin . No meu sistema, só consigo encontrar dois:

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

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

por muru 27.07.2014 / 01:05
4

Basta colocar a seguinte linha no topo do arquivo:

#!/bin/bash

Então, esse arquivo será automaticamente digitado: Shell Script sem nenhuma extensão!

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

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

    
por Pandya 27.07.2014 / 07:39

Tags