Estou confuso sobre as permissões de execução de arquivos que não se comportam como eu esperava. Provavelmente porque minhas expectativas estão erradas. De qualquer forma:
Eu tenho um arquivo de script, pois a simplicidade é chamada s
, localizada em ~/bin
. Para fins deste exemplo, o arquivo contém apenas as seguintes linhas:
#!/bin/zsh
echo "Test";
Muito simples.
Navego até o ~/bin
diretório e chmod
as permissões de arquivo de s
para 400
- ou seja, somente leitura somente para mim. Nenhuma permissão de execução. Então, eu tento executar o script digitando seu caminho, fornecendo o seguinte:
% ./s
zsh: permission denied: ./s
Por enquanto, tudo bem. O arquivo não pode ser executado devido a permissões incorretas. Aumentar as permissões até 500
(permissão de execução concedida) também funciona bem - com essas permissões, o arquivo executa bem:
% ./s
Test
Isso é tudo como esperado. Mas, então, as chmod
permissões voltam para 400
(executar a permissão novamente), tentando source
o arquivo, e isso acontece:
% source s
Test
Embora as permissões sejam 400
, o script é executado.
Então, aqui está a minha pergunta: por que ./s
falha (como deveria), mas é source s
executada normalmente? Isso não derrota todo o objetivo da permissão de execução?
Em 400
permissões, sh s
e zsh s
também funciona.
Tenho certeza de que estou fazendo ou entendendo algo terrivelmente errado em algum lugar. Pode alguém apontar onde a mim, e explicar a diferença entre ./s
, source s
, sh s
e zsh s
?