Por que não tornar executável o arquivo .txt em vez do arquivo .sh para executar scripts?

18

Eu queria saber qual é a necessidade de colocar comandos executáveis dentro de um arquivo .sh para criar um único script, já que posso fazer o mesmo colocando os comandos dentro de um arquivo .txt e tornando-o executável usando chmod .

Estou assumindo que isso pode ser feito com qualquer uma das extensões de arquivo. Então, estou bastante confuso sobre a necessidade da extensão .sh . Qualquer ajuda seria muito apreciada.

    
por Abhik Bhattacharjee 01.05.2018 / 18:37

2 respostas

47

Não há necessidade de a extensão do arquivo corresponder a algo específico, como você descobriu corretamente.

Em sistemas do tipo Unix, os tipos de arquivos são geralmente 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, que geralmente é feita para executáveis.

Verifique o comando file , ele mostra as informações que ele pode descobrir sobre um tipo de arquivo de seu conteúdo.

Para um script executável, o sistema espera um chamado "shebang" na primeira linha, que parece, e. como

#!/usr/bin/env python3

e indica qual programa deve ser executado 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, Bash para tentar interpretá-lo.

Assim, nos sistemas Unix / Linux, as extensões de nome de arquivo são principalmente uma dica (mas não garantia) para o usuário humano reconhecer rapidamente o que esperar de um arquivo específico para conter. É também uma convenção que pode ajudar, por exemplo encontrar arquivos mais rapidamente.

Note 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 que a extensão indique o tipo de arquivo).

Você também pode dar uma olhada em As extensões de arquivos têm algum propósito (para o sistema operacional)?

    
por Byte Commander 01.05.2018 / 18:45
3

Não existe um arquivo "extension" ou "type" em um nome de arquivo UNIX / Linux.

Como outros apontaram, o "tipo" pode ser encontrado usando o comando file, assumindo que a magia relevante está disponível em seu sistema. Geralmente, os nomes de arquivos do UNIX / Linux podem conter qualquer caractere disponível, mas geralmente é útil usar alguma forma de convenção para o nome, de modo que os seres humanos e as máquinas possam fazer julgamentos quanto ao conteúdo (e, portanto, ao 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 string ".tmp" no final do nome do arquivo. O resultado é o mesmo, um arquivo contendo dados que são necessários apenas por pouco tempo, mas o nome não requer um "." dentro dela nem a string "tmp". Isto pode por vezes ter vantagens, e. ao analisar uma lista de nomes de arquivos. Mas é a minha convenção e outra pessoa pode decidir sobre outra usando ".tmp" como a convenção de um nome para um arquivo temporário.

Então, minha resposta para você é que não existe uma extensão de arquivo UNIX / Linux, mas 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.

    
por PJF 02.05.2018 / 17:24