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?
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.
"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:
/usr/local/bin
pode ser uma escolha melhor./usr/bin
e/usr/local/bin
ambos devem estar disponíveis para todos os usuários, mas/usr/local/bin
é melhor para executáveis que não fazem parte dos pacotes.#!/usr/bin/env bash
ou#!/bin/bash
.Respostas:
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:
PS Você não precisa colocar seu script
/bin
. Você pode criar um diretório~/bin
e colocar seu script lá. O diretório~/bin
é incluído$PATH
por padrão, portanto, os scripts colocados lá podem ser executados como qualquer outro comando do shell.fonte
$PATH
por padrão" - Desde quando? Enfim,~/.local/bin
é provavelmente uma escolha melhor, pois é um padrão.Eu recomendo a recomendação de uso
~/bin
que é automaticamente adicionada ao seu$PATH
, como disse Sergey . Ou/usr/local/bin
, que já pode estar noPATH
. Contudo:Extensões são incomuns
/usr/bin
. No meu sistema, posso encontrar apenas dois:Portanto, se você estiver empacotando, definitivamente deixe de fora a extensão.
fonte
~/bin
é adicionado$PATH
automaticamente, se existir, não é necessário adicioná-lo manualmente. Basta criar o diretório, sair e fazer login novamente.Basta colocar a seguinte linha no topo do arquivo:
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?
fonte