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/shna maioria dos sistemas Linux, mas a questão era sobre o Solaris.