Por que preciso definir permissões de execução para executar um script bash quando ele pode ser executado se eu forçar com o "bash test.sh?"

0

Estes são os conteúdos de test.sh :

#!/bin/bash
echo "test me"

Para executar com bash test.sh , não há problema. Mas para executar com ./test.sh , ocorre um erro:

bash: ./test.sh: Permission denied

chmod u+x test.sh pode fazê-lo funcionar com ./test.sh .

Eu quero saber o motivo: por que não é necessário adicionar chmod u+x test.sh quando executá-lo com bash test.sh ?

E por que é necessário adicionar chmod u+x test.sh quando executá-lo com ./test.sh ?

    
por scrapy 17.06.2018 / 05:50

2 respostas

1

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.

    
por 17.06.2018 / 06:00
1

Ao contrário dos sistemas operacionais inspirados em CP / M, como DOS e Windows, o Unix não usa nomes de arquivos para indicar quais arquivos são executáveis.

Se você deseja executar um arquivo usando a chamada de SO ' execvpe () ' ou nomeando-o a linha de comando precisa ter permissão de execução

Contanto que tenha o bit de execução definido, chame-o como quiser, por exemplo: trump.gif ou foo-script (mas test não é um bom exemplo, pois já existe um comando com esse nome)

    
por 17.06.2018 / 08:21