Ao executá-lo com bash test.sh
, você está explicitamente informando ao bash para carregar e executar test.sh
. O arquivo só precisa ser lido para "correr" por esse método. Mas se você simplesmente executar um arquivo com ./test.sh
, ele não será executado porque o arquivo não tem permissões de execução explícitas. acabou de ler permissons.
Ou seja, no primeiro caso test.sh
está sendo carregado por bash
. Mas por si só, os sistemas Unix / Linux não executam arquivos por padrão. Além disso, se você remover esse #!/bin/bash
inicial de ./test.sh
e tentar executá-lo mesmo com permissões de execução, ele não será executado, pois o sistema não saberá o que fazer com os comandos abaixo dele.
E se você está se perguntando enquanto os arquivos não recebem permissões de execução automaticamente na criação? Bem, essa é uma longa conversa, mas basicamente fazer algo assim criaria uma nova superfície de ataque no seu sistema. Se alguém pode entrar no seu sistema e apenas executar arquivos escrevendo-os, isso é um grande problema.