web-dev-qa-db-fra.com

Utilisation de Chown $ User: $ User Inside Bash Script

Dans un petit script bash, je suis en cours d'exécution, je tente de chier un nouveau répertoire créé. J'ai ajouté:

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

après la ligne où je mkdir (Sudo mkdir /var/www/$sitename).

Pour une raison quelconque, le chipel n'est pas d'exécuter. Je peux l'exécuter manuellement mais quand écrit dans le fichier, cela ne fonctionne pas. J'ai remarqué que "chown" n'est pas souligné de la même couleur que "mkdir" et "chmod" mais je ne peux pas comprendre mon problème.

Pourquoi ne travaille pas ici?

Est-ce un problème avec $USER:$USER?

ÉDITER Voici le script complet. Comment puis-je chier le fichier à quel que soit l'utilisateur non racine exécuté le 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"
10
BrassApparatus

Si, pour une raison quelconque, $USER n'est pas défini, vous pouvez utiliser la commande id pour obtenir l'identité de l'utilisateur réel. Donc la première fois que vous utilisez le $USER variable, vous pouvez utiliser l'expansion de Shell pour fournir une valeur par défaut. Modifiez la ligne chown dans votre script à:

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

Si USER est vide ou non défini lorsque ceci est exécuté, bash définira la variable USER à la sortie de /usr/bin/id -run

8
Tim Cutts

Lorsque j'appelle mon script avec Sudo il définirait $USER Sur root.

$ Sudo ./myscript.sh

J'ai essayé la fonction chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename mais cela rendrait toujours la racine.

J'ai trouvé si j'avais utilisé who avec awk j'ai pu obtenir l'utilisateur actuel appelé le script avec Sudo.

currentuser=$(who | awk '{print $1}')}
chown -R $currentuser:$currentuser /var/www/$sitename`
4
Eric James Deiter

Afin de simplifier le problème et de recevoir la variable sitename, pourquoi ne lisez-vous pas une variable nom d'utilisateur?

Avec cela, vous vous assurez que l'exécution de script ne dépend pas des variables environnementales mises à disposition de la manière dont le script est exécuté.

2
marcosjsramos

Il n'y a qu'une petite faute que je pense. Sudo ouvre une nouvelle coquille pour exécuter la commande et après sudo, l'utilisateur est root. Alors peut-être que vous devriez utiliser quelque chose comme ceci:

Myuser = $ utilisateur

Sudo chown $ myuser: $ myuser

comme je pense que Myuser n'est pas Systemspezific écrasé et fonctionnera.

0
Andreas Bartels