Não, isso não significa isso. Se você tiver um arquivo de texto com o seu conjunto de permissões de execução (por exemplo, chmod a+x somefile
), e a primeira linha do arquivo for algo como
"#!/path/to/executable"
Ele apenas diz ao Unix que programa usar para executar o script. Se um arquivo de texto estiver marcado como um executável (ou seja, um script), o Unix iniciará qualquer programa especificado dessa maneira e enviará o restante do arquivo de texto (o script) para esse programa. Tipicamente o programa especificado será um shell ( /bin/sh
, /bin/csh
ou /bin/bash
), o interpretador para alguma linguagem de programação (Perl, Python ou Ruby) ou algum outro programa que execute scripts (como os manipuladores de texto Awk ou Sed).
Normalmente, o "#" especifica um comentário em vários idiomas, somente se a linha primeiro começar com "#!" é algo especial. Se um arquivo estiver marcado como executável, mas não começar com "#!", O Unix assumirá que é algum tipo de binário (por exemplo, um executável ELF feito pelo compilador C e pelo vinculador).
Em geral, o Unix não depende do sufixo dos arquivos. Muitos programas não precisam nem adicionam automaticamente seus sufixos típicos, sendo uma exceção os programas de compactação (como gzip
e bzip2
) que geralmente substitui o arquivo original por um compactado, adicionando um sufixo para marcar o tipo de compactação. um dos poucos programas que reclama de sufixo incorreto).
Em vez disso, o arquivo é identificado pelo seu conteúdo através de uma série de testes, procurando por "números mágicos" e outros identificadores (você pode tentar o comando 'arquivo' em alguns arquivos para testar isso). Isso também é usado pelos navegadores de arquivos no GNOME e no KDE para selecionar ícones e a lista de programas para abrir / editar o arquivo. Aqui, o tipo MIME do arquivo é identificado por tais testes, em seguida, os programas adequados para visualização e edição são encontrados em uma lista associada ao tipo MIME - não ao sufixo como no Windows.
Como um dos testes seria verificar se a primeira linha de um arquivo de texto é "#! / alguma coisa" e, em seguida, observe o que "algo" é; você poderia dizer, por exemplo, que #!/usr/bin/perl
identificou o arquivo como um script perl - mas isso é mais um efeito colateral. Em qualquer caso, é o conteúdo do arquivo usado para identificá-lo, não um sufixo arbitrário. Como tal, terminações como .pl (Perl) e .awk (Awk) são puramente para ajudar um usuário humano a identificar o tipo de arquivo, ele não é usado pelo Unix para o tipo de impedimento (como os sufixos no Windows).
Você pode realmente criar um "script" sem o "#! / something", mas o Unix não poderá executá-lo automaticamente como um executável (não saberia em qual programa executar o script). Em vez disso, você teria que "iniciar" manualmente com algo como perl myscript
ou python myscript
. Muitos scripts em aplicativos Python e Perl maiores na verdade não serão iniciados com "#! / Alguma coisa", pois são scripts para "uso interno" e não se destinam a serem invocados diretamente pelo usuário.
Em vez disso, você iniciará o script principal (que começa com "#! / something") e passará esses outros scripts para o interpretador enquanto este script for executado.