Em um pequeno script bash que estou executando, estou tentando mostrar um novo diretório que é criado. Eu já 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 alguma razão, o chown não está sendo executado. Eu posso executá-lo manualmente, mas quando escrito no arquivo, ele não funciona. Percebi que "chown" não é destacado na mesma cor que "mkdir" e "chmod", mas não consigo descobrir o meu problema.
Por que o chown não funciona aqui?
É um problema $USER:$USER
?
EDIT Aqui está o script completo. Como eu mostraria o arquivo para qualquer usuário não raiz 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"
bash
shell-script
terminal
gnome-terminal
chown
BrassApparatus
fonte
fonte
getent group $USER
$USER
variável é definida durante o logon interativo. Como você executa seu script - da sessão de login ou usando cron ou daemon?echo USER is $USER
, o que é impresso?USER is root
,. Com a edição que fiz, você acha que pode explicar como exibir o arquivo para qualquer usuário não raiz que executa o script?Respostas:
Se, por algum motivo,
$USER
não estiver definido, você poderá usar oid
comando para obter a identidade do usuário real. Portanto, na primeira vez que você usa a$USER
variável, você pode usar a expansão do shell para fornecer um valor padrão. Mude achown
linha do seu script para:Se
USER
estiver vazio ou não estiver definido quando isso for executado, o bash definirá aUSER
variável para a saída de/usr/bin/id -run
fonte
Quando eu chamava o meu script,
sudo
ele era definido$USER
como root.Eu tentei o
chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename
mas ainda retornaria root.Descobri que se eu usei
who
comawk
que eu era capaz de obter o usuário atual que chamou o script comsudo
.fonte
currentuser
(em algum momento) de usuários com várias linhas, use em seu$(who | awk 'NR==1{print $1}')
lugar.chown -R $currentuser:$currentuser /usr
- não funciona - ainda mostra root: rootPara 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ê deve garantir que a execução do script não depende das variáveis ambientais disponibilizadas da maneira como o script é executado.
fonte
Acho que há apenas uma pequena falha. O sudo abre um novo shell para executar o comando e depois do sudo o usuário é root. Então, talvez você deva usar algo como isto:
como eu acho que MYUSER não é sobrescrito em sistemas específicos e deve funcionar.
fonte
echo chown...
e ver.)