Usando o chown $ USER: $ USER no script bash

7

Em um pequeno script que estou executando, estou tentando fazer um novo diretório criado. Eu adicionei:

sudo chown $USER:$USER /var/www/$sitename
sudo chmod 775 /var/www/$sitename

depois da linha onde eu mkdir ( sudo mkdir /var/www/$sitename ).

Por algum motivo, o chown não está sendo executado. Eu posso executá-lo manualmente, mas quando escrito no arquivo não funciona. Eu notei que "chown" não está destacado na mesma cor que "mkdir" e "chmod", mas não consigo entender meu problema.

Por que o chown não funciona aqui?

É um problema com $USER:$USER ?

EDITAR Aqui está o roteiro completo. Como eu faria o arquivo para qualquer usuário não root que executasse o script?

#!/bin/sh
#!/bin/bash
# New Site

cd /etc/apache2/sites-available/
echo "New site name (test.my):"
read sitename
echo "<VirtualHost *:80>

        ServerAdmin admin@$sitename

    ServerName $sitename

        ServerAlias $sitename

    DocumentRoot /var/www/$sitename

        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/$sitename>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>" > $sitename.conf
sudo mkdir /var/www/$sitename
sudo chown $USER:$USER /var/www/$sitename
echo USER is $USER
sudo chmod 775 /var/www/$sitename
sudo a2ensite $sitename.conf
sudo apachectl restart
echo "New site created"
    
por BrassApparatus 05.02.2015 / 21:11

4 respostas

7

Se, por algum motivo, $USER não estiver definido, você poderá usar o comando id para obter a identidade do usuário real. Portanto, na primeira vez que você usar a variável $USER , poderá usar a expansão do shell para fornecer um valor padrão. Altere a linha chown no seu script para:

sudo chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename

Se USER estiver vazio ou desfeito quando isso for executado, o bash definirá a variável USER para a saída de /usr/bin/id -run

    
por 22.05.2015 / 10:48
4

Quando eu chamo meu script com sudo , ele define $USER como raiz.

$ sudo ./myscript.sh

Eu tentei o chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename , mas ele ainda retornaria raiz.

Descobri que se eu usasse who com awk , era possível obter o usuário atual que chamou o script com sudo .

currentuser=$(who | awk '{print $1}')}
chown -R $currentuser:$currentuser /var/www/$sitename'
    
por 21.08.2016 / 07:43
2

Para simplificar o problema e como você está obtendo a variável sitename, por que você não lê uma variável de nome de usuário?

Com isso, você se certificaria de que a execução do script não dependesse das variáveis ambientais disponibilizadas da maneira que o script é executado.

    
por 22.05.2015 / 11:06
0

Existe apenas uma pequena falha, eu acho. O sudo abre um novo shell para executar o comando e depois do sudo o usuário é o root. Então talvez você deva usar algo assim:

MYUSER=$USER

sudo chown $MYUSER:$MYUSER

como eu acho que MYUSER não é sobrescrito pelo sistema e deve funcionar.

    
por 09.07.2016 / 14:30