Por que meu arquivo de script é executável em uma máquina virtual?

1

Eu tenho o Ubuntu instalado em uma máquina virtual no Windows. Lá, quando eu executo um script, basta digitar sudo ./blabla.sh no terminal para executá-lo.

Então eu instalei o ubuntu do mesmo arquivo iso diretamente em um laptop, então não é uma máquina virtual.

Quando eu executo o mesmo script: sudo ./blabla.sh , ele diz que o comando não foi encontrado. Então, se eu fizer chmod +x blabla.sh , posso executá-lo.

Por que existe essa diferença entre os dois?

    
por Dave 03.05.2015 / 23:25

1 resposta

0

sudo precisa de pelo menos um bit de execução configurado para executar o arquivo, ou seja, você precisa definir o bit de execução para (pelo menos) usuário ou grupo ou outros. Se nenhum bit de execução estiver definido, você não poderá executar o arquivo como sudo ./script .

Este exemplo vai deixar você claro:

$ ls -l test_scr 
-rw-rw-r-- 1 user user 30 May  4 03:50 test_scr

$ sudo ./test_scr
sudo: ./test_scr: command not found

$ ./test_scr
bash: ./test_scr: Permission denied

$ chmod u+x test_scr 

$ sudo ./test_scr
Hello world

$ ./test_scr
Hello world

Observe também que você não precisa tornar o arquivo executável, você pode executar o arquivo como um argumento para o binário do shell para executá-lo:

$ bash test_scr 
Hello world

$ sudo bash test_scr 
Hello world
    
por heemayl 03.05.2015 / 23:58