A primeira linha do script é chamada de #!
line (às vezes chamada de "shebang" linha).
É usado apenas quando um script é executado diretamente, como em
./test.sh
Explicação
Quando você executa um executável, o sistema operacional analisa os dois primeiros bytes para informar que tipo de programa é.
Quando você corre
./test.sh
o sistema operacional vê que os dois primeiros bytes de ./test.sh
são #!
, então ele sabe que o programa é um script.
Ele lê o resto da linha para ver qual shell 1 deve ser usado para executar o script. Nesse caso, o resto da linha é /usr/bin/sh
, então é executado /usr/bin/sh test.sh
2 .
Quando você corre
bash test.sh
ele encontra o bash em /usr/bin/bash
3 . Ele vê que os primeiros dois bytes de /usr/bin/bash
não são #!
, portanto, ele executa /usr/bin/bash test.sh
sem sequer olhar para a primeira linha de test.sh.
Em ambos os casos, sh
e bash
realmente ignoram a linha shebang porque qualquer linha que comece com #
é um comentário. O #
só tem esse efeito mágico por causa do sistema operacional, não do shell.
Mais informações:
- #!
- A história inteira em #! / usr / bin / ksh
- Página man executiva do Solaris
- página man execve do Linux
Notas de rodapé:
- Na verdade, pode ser qualquer programa, não precisa ser um shell.
- Na verdade, mais como
execl("./test.sh", "/usr/bin/sh", "./test.sh", NULL)
. -
/bin/sh
na maioria dos sistemas Linux, mas a questão era sobre o Solaris.