Invocar um script com sudo ignora o shebang

1

Invocar um script usando sudo ignora o shebang e executa o script em um shell diferente. Para testar, criei um script (test.sh) contendo:

#/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: 'readlink /proc/$$/exe'"

Primeiro, invoco o script sem sudo :

$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash

Em seguida, invoco o script com o sudo :

$ sudo ./test.sh
BASH is:
actual shell is: /bin/dash

Eu não esperava isso. Isso é um comportamento normal?

Observação: estou usando o Ubuntu (14.04), em que o shell padrão / bin / sh é um link simbólico para traço .

    
por zephon 20.12.2015 / 15:57

2 respostas

3

Seu shebang não é um shebang. É só ela, perdendo o estrondo:

#!/bin/bash  

Exemplo corrigido:

$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ sudo ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ cat ./test.sh 
#!/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: 'readlink /proc/$$/exe'"
    
por 20.12.2015 / 16:01
2

Seu exemplo omite o caractere ! , por exemplo, você deve ter #!/bin/bash

Sem uma linha de hashbang válida, você obterá o shell padrão , que é dash .

    
por 20.12.2015 / 16:01