chown não funciona através de script

1

Eu tenho um script:

#! /bin/bash
sudo chown -R $USER:$USER /opt/Folder

O chown não parece ser executado.

Se eu escrever a linha acima do terminal, ela funcionará bem!

Eu li isso mas não ajuda.

O nome do script é mysetup.sh e estou executando como sudo sh mysetup.sh .

Não fornece resultados.

Se eu executar como sudo bash -x mysetup.sh , estou recebendo:

sudo chown -R root:root /opt/Folder

Esse problema não está relacionado a this , já que o USER está definido.

    
por George 08.07.2016 / 23:20

2 respostas

3

Você está tentando alterar o conteúdo de /opt/Folder para seu próprio ID do usuário, não é você.

Aqui está o seu comando mais uma vez:

sudo chown -R $USER:$USER /opt/Folder

Isso funciona na linha de comando porque a variável $USER é avaliada antes da execução do comando e, portanto, é executada como esta (supondo que seu nome de usuário seja george ):

sudo chown -R george:george /opt/Folder

Por outro lado, quando você executa um comando com sudo , entre outras coisas, a variável $USER recebe o valor do usuário de destino, que neste caso é root . Portanto, executando sudo bash mysetup.sh , você está executando mysetup.sh como root, então o comando é executado com $USER definido como root e é avaliado como este

sudo chown -R root:root /opt/Folder

A solução no seu caso é evitar a execução de todo o script em sudo e permitir que o script use sudo , quando necessário, para executar comandos específicos com privilégios elevados. Em outras palavras, use bash mysetup.sh em vez de sudo bash mysetup.sh .

    
por 09.07.2016 / 14:52
-3

Você não mencionou sua distribuição e versão do Linux (ou unix) que está executando, então estou indo para uma tangente aqui, supondo que esta linha a seguir esteja em seu /etc/sudoers

Defaults requiretty

daí você não pode rodar o sudo sem um tty. E quando você tenta executá-lo a partir do script, o sudo não é executado, o que enfraquece o comando chown .

Tente adicionar as opções -t ou -tt ao seu comando sudo. Estes irão criar um pseudo-terminal para executar sua cadeia de comandos sudo e esperamos que seja bem-sucedida, mas essa opção também tem seus efeitos colaterais, não sendo discutidos aqui. Você pode procurá-los se quiser.

Se você tiver acesso à configuração sudo , retire a linha mencionada acima para obter as melhores soluções, mas com essa ação, você estará eliminando um nível de barricadas, apesar de ser fraco.

    
por 08.07.2016 / 23:42