É implementado como um comentário para que qualquer coisa que chegue nessa linha não seja "relevante" para o intérprete especificado. por exemplo, todas as linguagens de script tendem a entender que uma linha que começa com #é um comentário e ignorará a !/usr/bin/whateverparte, que de outra forma poderia ser um erro de sintaxe nessa linguagem específica.
Geralmente é o kernel, não o shell, que processa isso. O shell simplesmente chama a chamada do exec()sistema no arquivo.
tripleee
47
Quando você tenta executar um programa em unix (um com o conjunto de bits executável), o sistema operacional examinará os primeiros bytes do arquivo. Estes formam o chamado "número mágico", que pode ser usado para decidir o formato do programa e como executá-lo.
#!corresponde ao número mágico 0x2321 (procure-o em uma tabela ascii). Quando o sistema vê esse número mágico, sabe que está lidando com um script de texto e lê até o próximo \n(há um limite, mas ele me escapa). Depois de identificar o intérprete (o primeiro argumento após o shebang), ele chamará o intérprete.
Outros arquivos também têm números mágicos. Tente olhar para um arquivo de bitmap (.BMP) via lesse você verá os dois primeiros caracteres BM. Esse número mágico indica que o arquivo é realmente um bitmap.
Se o arquivo em que esse script reside for executável, o hash-bang ( #!) informa ao sistema operacional qual intérprete usar para executar o script. Nesse caso, é /bin/sh, por exemplo.
A primeira linha informa ao shell que, se você executar o script diretamente (./run.sh; em oposição a / bin / sh run.sh), deverá usar esse programa (/ bin / sh nesse caso) para interpretá-lo.
Você também pode usá-lo para passar argumentos, geralmente -e (sair com erro) ou usar outros programas (/ bin / awk, / usr / bin / perl, etc).
#!/bin/shou #!/bin/bashprecisa ser a primeira linha do script, porque se você não o usar na primeira linha, o sistema tratará todos os comandos nesse script como comandos diferentes. Se a primeira linha for #!/bin/sh, ele considerará todos os comandos como um script único e mostrará que esse arquivo está sendo executado no pscomando e não os comandos dentro do arquivo.
O estouro de pilha não é o Twitter. Por favor, dedique um tempo para realmente soletrar palavras como "u" e "1st". Você está ajudando a escrever um livro de referência para que a gramática e a ortografia adequadas sejam significativas. Além disso, preste atenção à formatação correta. Os comandos que seriam emitidos a partir da linha de comando, como ps, e trechos de código como, #!/bin/shdevem ser formatados.
the Tin Man
Tentei limpar o inglês aqui, mas ainda não tenho certeza do que isso significa. Eu acho que a resposta tenta dizer que os comandos no script serão executados como comandos distintos e a adição de um shebang mostrará o script como um único comando em uma lista de processos. Isso não é verdade.
Respostas:
É chamado de shebang e informa ao shell pai qual intérprete deve ser usado para executar o script.
por exemplo
É implementado como um comentário para que qualquer coisa que chegue nessa linha não seja "relevante" para o intérprete especificado. por exemplo, todas as linguagens de script tendem a entender que uma linha que começa com
#
é um comentário e ignorará a!/usr/bin/whatever
parte, que de outra forma poderia ser um erro de sintaxe nessa linguagem específica.fonte
exec()
sistema no arquivo.Quando você tenta executar um programa em unix (um com o conjunto de bits executável), o sistema operacional examinará os primeiros bytes do arquivo. Estes formam o chamado "número mágico", que pode ser usado para decidir o formato do programa e como executá-lo.
#!
corresponde ao número mágico 0x2321 (procure-o em uma tabela ascii). Quando o sistema vê esse número mágico, sabe que está lidando com um script de texto e lê até o próximo\n
(há um limite, mas ele me escapa). Depois de identificar o intérprete (o primeiro argumento após o shebang), ele chamará o intérprete.Outros arquivos também têm números mágicos. Tente olhar para um arquivo de bitmap (.BMP) via
less
e você verá os dois primeiros caracteresBM
. Esse número mágico indica que o arquivo é realmente um bitmap.fonte
Se o arquivo em que esse script reside for executável, o hash-bang (
#!
) informa ao sistema operacional qual intérprete usar para executar o script. Nesse caso, é/bin/sh
, por exemplo.Há um artigo da Wikipedia sobre isso para obter mais informações.
fonte
A primeira linha informa ao shell que, se você executar o script diretamente (./run.sh; em oposição a / bin / sh run.sh), deverá usar esse programa (/ bin / sh nesse caso) para interpretá-lo.
Você também pode usá-lo para passar argumentos, geralmente -e (sair com erro) ou usar outros programas (/ bin / awk, / usr / bin / perl, etc).
fonte
#!/bin/sh
ou#!/bin/bash
precisa ser a primeira linha do script, porque se você não o usar na primeira linha, o sistema tratará todos os comandos nesse script como comandos diferentes. Se a primeira linha for#!/bin/sh
, ele considerará todos os comandos como um script único e mostrará que esse arquivo está sendo executado nops
comando e não os comandos dentro do arquivo.fonte
ps
, e trechos de código como,#!/bin/sh
devem ser formatados.