bash permission denied mas sh funciona

6

Um pequeno script meu em uma partição do Windows montada se recusa a ser executado diretamente (shebang é #!/bin/bash ), mas interessante é chamá-lo com bash / sh works. O script é simplesmente uma coleção de comandos grep e sed .

A unidade é montada com todos os direitos:

defaults,windows_names,rw,auto,user

Por isso, para o arquivo obtido

-rwxrwxrwx 1 root root

para o arquivo.

O que está acontecendo lá?

    
por MERose 20.12.2014 / 12:46

1 resposta

10

O mais provável é que a partição do windows esteja montada com o sinalizador noexec ativado. Você pode confirmar na saída de:

mount

Na saída, você provavelmente verá algo como (rw,noexec) no final da linha. O noexec flag não é um padrão, então isso geralmente acontece quando é configurado explicitamente para montá-lo dessa maneira.

Quando você executa o script com bash /path/to/script.sh , ele funciona porque nesse caso você não está executando o script, mas você está executando bash , que interpreta o script dado em seu argumento.

Como nota adicional:

but interestingly calling it with sh works.

Como o script tem o shebang #!/bin/bash , você deve usar bash em vez de sh para executá-lo. O autor do script provavelmente usou este shebang por uma razão, e algumas implementações de sh (ou o que estiver vinculado em seu sistema) podem não suportar alguns recursos do Bash.

Finalmente, para poder executar o script diretamente, você poderia tentar montar a unidade com exec flag em vez de noexec , mas primeiro pense se isso é realmente uma boa ideia ou não. O padrão de montagem com noexec é para um recurso de segurança, para impedir a execução acidental de arquivos potencialmente perigosos provenientes de fontes não confiáveis. Eu não acho que você deveria mudar isso. Basta executar com bash .

    
por 20.12.2014 / 12:54