Eu queria saber qual é a necessidade de colocar comandos executáveis dentro de um .sh
arquivo para criar um único script, pois eu posso fazer o mesmo colocando os comandos dentro de um .txt
arquivo e tornando-o executável usando chmod
.
Suponho que isso possa ser feito com qualquer uma das extensões de arquivo. Então, estou bastante confuso sobre a necessidade de .sh
extensão. Qualquer ajuda seria muito apreciada.
.txt
.txt suffix.txt, você é.txt not.txt ajudando.txt a si mesmo.txt (ou.txt anybody.txt else .txt) compreensão.txt what.txt cada.txt arquivo.txt é.txt lá.txt para.txt.Respostas:
Não há necessidade de a extensão do arquivo corresponder a algo específico, como você descobriu corretamente.
Em sistemas tipo Unix, os tipos de arquivo geralmente são derivados do conteúdo do arquivo (ou seja, o "número mágico" ou outras estruturas características nos primeiros bytes) e não do nome. Você também pode omitir completamente a extensão, o que geralmente é feito para executáveis.
Verifique o
file
comando, ele mostra as informações que você pode descobrir sobre um tipo de arquivo a partir do seu conteúdo.Para um script executável, o sistema espera um chamado "shebang" na primeira linha, que se parece, por exemplo, com
e indica qual programa executar como intérprete com o arquivo de script como argumento. Se você executar um arquivo de texto sem tal shebang, ele usará seu shell padrão, ou seja, o Bash para tentar interpretá-lo.
Portanto, nos sistemas Unix / Linux, as extensões de nome de arquivo são principalmente uma dica (mas nenhuma garantia) para o usuário humano reconhecer rapidamente o que esperar que um arquivo específico contenha. Também é uma convenção que pode ajudar, por exemplo, a encontrar arquivos mais rapidamente.
Observe que existem algumas exceções, onde o nome e a extensão são importantes (por exemplo, alguns arquivos de configuração do sistema que devem seguir uma convenção de nomenclatura, ou muitos visualizadores e editores de imagens também exigem a extensão para indicar o tipo de arquivo).
Você também pode dar uma olhada em As extensões de arquivo têm algum objetivo (para o sistema operacional)?
fonte
Não existe um arquivo "extensão" ou "tipo" em um nome de arquivo UNIX / Linux.
Como outros já apontaram, o "tipo" pode ser encontrado usando o comando file, assumindo que a mágica relevante esteja disponível no seu sistema. Os nomes de arquivo UNIX / Linux normalmente podem conter qualquer caractere disponível, mas geralmente é útil usar alguma forma de convenção para o nome, para que humanos e máquinas possam julgar o conteúdo (e, portanto, o uso do conteúdo).
Como exemplo, costumo usar uma vírgula como primeiro caractere do nome do arquivo para indicar um arquivo temporário, em vez de usar algo como a sequência ".tmp" no final do nome do arquivo. O resultado é o mesmo, um arquivo contendo dados que são necessários apenas por um curto período, talvez, mas o nome não precisa ter um "." dentro dele nem a string "tmp". Às vezes, isso pode ter vantagens, por exemplo, ao analisar uma lista de nomes de arquivos. Mas é minha convenção e outra pessoa pode decidir sobre outra pessoa, mesmo usando ".tmp" como convenção de um nome para um arquivo temporário.
Portanto, minha resposta é que não existe uma extensão de arquivo UNIX / Linux apenas um conjunto de convenções que normalmente se parecem com as extensões de arquivo usadas em outros sistemas operacionais e seus sistemas de arquivos.
fonte
"."
devem ser pontilhados pelo shell (eles não podem ser executados de maneira significativa em um subshell). Do mesmo modo, desabilito a convenção padrão "ponto inicial = arquivo oculto" em meus aliases / scripts que são usadosls
para que eu possa ver todos os arquivos, incluindo os "ocultos". Da mesma forma, no Windows, desabilito a configuração "ocultar extensões de arquivo".