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"
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
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`
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é.
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.