Na wikipedia, o artigo para .sh diz:
Para o tipo de extensão de arquivo .sh, consulte Bourne shell .
E quanto a outras conchas unix?
Eu sei que o shebang é usado dentro do arquivo para indicar um intérprete para execução, mas eu me pergunto:
- Quais são os prós e os contras das extensões de arquivo versus nenhuma extensão de arquivo?
shell-script
files
scripting
filenames
conventions
Amelio Vazquez-Reina
fonte
fonte
bash script.sh
(oush
, é claro).Respostas:
Eu chamaria apenas
.sh
algo que deveria ser portátil (e espero que seja portátil).Caso contrário, acho melhor esconder a linguagem. O leitor cuidadoso o encontrará na linha shebang de qualquer maneira. (Na prática,
.bash
ou.zsh
, etc ... sufixos são raramente utilizados.)fonte
Eu diria que não existem "boas práticas" para extensões de arquivo, estritamente em termos técnicos: sistemas de arquivos Unix / Linux / * BSD não suportam extensões por si só. O que você está chamando de extensão é apenas um sufixo de um único nome de arquivo. Isso é diferente dos sistemas de arquivos e sistemas operacionais VM / CMS, VMS, MS-DOS e Windows, onde um local especial no equivalente inode-moral é reservado para uma extensão.
Esse pequeno discurso agora acabou, acho um pouco tolo colocar um sufixo ".sh" ou ".ksh" ou ".bash" em um nome de arquivo de script de shell. Um programa é um programa: não existe benefício em distinguir o que é executado. Nenhum unix ou linux ou qualquer kernel decidiu chamar um intérprete em algum arquivo apenas por causa do sufixo do nome do arquivo. Tudo é feito pela
#!
linha, ou alguma outra seqüência de "número mágico" de bytes no início do arquivo. De fato, decidir o que executar com base em uma "extensão" de nome de arquivo é um dos fatores que tornam o Windows um imã de malware. Veja quantos golpes de malware do Windows envolvem um arquivo chamado "something.jpg.exe" - por padrão, o Windows mais recente não mostra a extensão ".exe" e incentive o usuário a clicar duas vezes no botão "O que você pode pensar como um comando direto geralmente é um script de shell de qualquer maneira. Às vezes
cc
tem sido um script sh,firefox
é um script sh,startx
é um script sh. Não acredito que exista um benefício cognitivo ou organizacional em marcar um script com o sufixo ".sh".fonte
.sh
extensão a um script de shell , precisará digitá-lo.sh
como parte do nome do comando ao iniciá-lo. Essa é a principal razão pela qual eu não gosto de colocar essa extensão (o mesmo com qualquer coisa que tenha uma linha shebang). BTW, o problema no Windows não é o.exe
prefixo em si (é trivial criar um executável nomeadoimage.jpg
no Linux, afinal), mas o fato de o Windows geralmente ocultar essa extensão, combinado com o fato de que a ação necessária para iniciar um executável e abrir um documento é exatamente o mesmo.Como alguém que trabalhou em uma infinidade de ambientes? Nix, tive que escrever em uma ampla variedade de conchas. Acredite ou não, através das plataformas, as conchas não são as mesmas. Portanto, se você mantiver sua biblioteca pessoal em vários shells (quando necessário), é muito útil usar extensões para identificar os shells. Dessa forma, quando você muda para outra plataforma e o shell é um pouco diferente, você sabe quais scripts devem ser alvos de modificações. .sh .ksh .bsh .csh ...
fonte
#!
no início do script (por exemplo#!/bin/bash
)?Você não deve usar uma extensão para executáveis, pois eles não são intercambiáveis. Imagine que você possui um script de shell e
a.sh
, em seguida, reescreva em pythona.py
, agora você precisa alterar todos os programas que o chamam de script, e vazou detalhes de implementação.Toda a extensão do nome de arquivo no Windows da Mircosoft é uma bagunça: por exemplo, o que poderia ter sido
a.audio, b.audio, c.audio
, éa.mp3, b.wav, c.ogg
ed.picture, e.picture, f.picture
éd.jpeg, e.png, f.gif
. Na maioria das vezes, não nos importamos com o formato do áudio ou da imagem. Também precisamos gastar muito tempo ensinando aos novos usuários todas as extensões de arquivo.fonte
*.sh
Eu corri em é que Debian derun-parts
não executar scripts com extensões, como em/etc/cron.*/
: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.htmlComo você disse, as extensões de arquivo Unix são meramente informações. Você só precisa que seu script tenha uma aparência correta e seja executável.
Você não pode ter extensão ou uso
.sh
.Pessoalmente, uso as seguintes convenções, independentemente do shell usado (csh, tcsh, bash, sh, ...):
.sh
para scripts clássicos, de baixo a alto grau.fonte
As extensões de script do shell são bastante úteis. Por exemplo, geralmente escrevo scripts que possuem vários arquivos em vários idiomas (por exemplo, bash, awk e lua) no mesmo diretório. Se eu precisar procurar uma string apenas nos arquivos bash, a extensão tornará isso muito útil, para reduzir falsos positivos. Ou se eu quiser fazer uma contagem de linhas de todo o meu código de base para esse projeto.
É doloroso ter que digitar a extensão ao executar o programa, por isso também faço um link simbólico sem a extensão para o executável principal, para editá-lo / executá-lo sem precisar digitar a extensão toda vez. Os links simbólicos são baratos e fáceis.
fonte
Como outros já disseram, o shell não se importa com extensões. No entanto, ele permite a rápida identificação humana de arquivos. Vejo arquivos terminando em
.py
ou.sh
e sei rapidamente o que eles (pelo menos) devem ser. Como Steve diz, pesquisar por extensão de arquivo ou fazer uma contagem de linhas também são considerações práticas.fonte