A execução de um script com ./script.sh falha enquanto “sh script.sh” funciona

1

Estou muito confuso com esse erro e nem sei o que procurar no Google:

Falha - Execução de um script com:

./test.sh 
bash: ./test.sh: "Permission denied" 

Obras - enquanto esses acessos funcionam:

sh ./test.sh
Works
bash ./test.sh
Works

O script de teste:

cat test.sh 
#!/bin/bash

echo "Works"

Com todos os direitos de execução:

chmod 777 test.sh

ls -als test.sh 
4 -rwxrwxrwx 1 edo edo 27 13. Feb 10:41 test.sh

Eu não entendo por que isso está acontecendo, pois não faz sentido para mim e não tenho ideia de quais palavras usar no Google para descrever o comportamento corretamente.

    
por edorian 13.02.2012 / 10:49

1 resposta

6

A execução de um script, dependendo da linha shebang, funciona de forma bem diferente de passá-lo como argumento para um shell.

No primeiro caso, o arquivo deve residir em uma partição executável e deve conter uma linha shebang válida para um shell existente.

No último caso, nada disso é necessário, já que a shell na qual você está chamando o script assume a responsabilidade por essas coisas.

Note que você não está usando o mesmo shell para esses testes: o primeiro infere bash, enquanto o segundo usa sh.

Meu palpite é que a partição em que seu script reside não permite a execução; mount -v dirá se esse é o caso.

    
por 13.02.2012 / 10:54