В небольшом скрипте bash, который я запускаю, я пытаюсь создать новый каталог, который создается. Я добавил:
sudo chown $USER:$USER /var/www/$sitename
sudo chmod 775 /var/www/$sitename
после строки, где я mkdir ( sudo mkdir /var/www/$sitename
).
По некоторым причинам чоун не выполняется. Я могу выполнить его вручную, но при записи в файл это не работает. Я заметил, что «chown» не выделен тем же цветом, что и «mkdir» и «chmod», но я не могу понять свою проблему.
Почему здесь не работает работа?
Это проблема с $USER:$USER
?
РЕДАКТИРОВАТЬ Вот полный сценарий. Как бы я выбрал файл для того, кто бы не выполнял сценарий пользователем без прав root?
#!/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
источник
источник
getent group $USER
$USER
переменная устанавливается во время интерактивного входа в систему. Как вы запускаете свой скрипт - из сеанса входа в систему или с помощью cron или из демона?echo USER is $USER
, что она печатает?USER is root
. Как вы думаете, с помощью редактирования, которое вы сделали, вы можете объяснить, как создать файл, чтобы тот, кто не является пользователем root, выполнял сценарий?Ответы:
Если по какой-либо причине
$USER
не установлено, вы можете использоватьid
команду для получения личности реального пользователя. Поэтому при первом использовании$USER
переменной вы можете использовать расширение оболочки, чтобы указать значение по умолчанию. Изменитеchown
строку в вашем скрипте на:Если
USER
при запуске он пуст или не установлен, bash установитUSER
переменную на выход/usr/bin/id -run
источник
Когда я вызываю свой скрипт,
sudo
он устанавливается$USER
в root.Я попробовал,
chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename
но он все равно вернет root.Я обнаружил, что если я использовал
who
с,awk
я смог получить текущего пользователя, который вызвал скрипт сsudo
.источник
currentuser
(иногда) для многострочных пользователей, используйте$(who | awk 'NR==1{print $1}')
вместо этого.chown -R $currentuser:$currentuser /usr
- не работает - по-прежнему показывает root: rootЧтобы упростить проблему и поскольку вы получаете переменную sitename, почему бы вам не прочитать переменную username?
При этом вы убедитесь, что выполнение сценария не зависит от переменных среды, доступных для способа выполнения сценария.
источник
Я думаю, что есть только маленькая ошибка. sudo открывает новую оболочку для выполнения команды, и после sudo пользователь является пользователем root. Поэтому, возможно, вам следует использовать что-то вроде этого:
так как я думаю, что МЮСЕР не переписан и будет работать.
источник
echo chown...
и посмотрите.)