Использование chown $ USER: $ USER внутри сценария bash

В маленьком сценарии bash, который я запускаю, я пытаюсь использовать новый созданный каталог. Я добавил:

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

после строки, где I mkdir ( sudo mkdir /var/www/$sitename ).

По какой-то причине chown не выполняется. Я могу выполнить его вручную, но когда он написан в файле, он не работает. Я заметил, что «chown» не выделяется в том же цвете, что и «mkdir» и «chmod», но я не могу понять свою проблему.

Почему здесь не работает chown?

Это проблема с $USER:$USER ?

EDIT Вот полный скрипт. Как я мог бы использовать файл независимо от того, какой пользователь 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" 

4 Solutions collect form web for “Использование chown $ USER: $ USER внутри сценария bash”

Если по какой-либо причине $USER не установлен, вы можете использовать команду id для получения идентификатора реального пользователя. Таким образом, при первом использовании переменной $USER вы можете использовать расширение оболочки для предоставления значения по умолчанию. Измените строку chown в вашем скрипте так:

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

Если USER пуст или не задан при запуске, bash установит переменную USER на выход /usr/bin/id -run

Чтобы упростить проблему, и поскольку вы получаете переменную sitename, почему бы вам не прочитать переменную имени пользователя?

При этом вы должны убедиться, что выполнение скрипта не зависит от переменных окружения, доступных для использования сценария.

Когда я вызываю свой скрипт с sudo он установит $USER в root.

 $ sudo ./myscript.sh 

Я попробовал chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename но он все равно вернет root.

Я обнаружил, что если я использовал who с awk я смог получить текущего пользователя, который вызвал скрипт с sudo .

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

Я думаю, что есть только крошечная ошибка. sudo открывает новую оболочку для выполнения команды, а после sudo пользователь является root. Поэтому, возможно, вы должны использовать что-то вроде этого:

MyUser = $ USER

sudo chown $ MYUSER: $ MYUSER

так как я думаю, что MYUSER не перезаписывается системой и не работает.

  • "-bash: warning: setlocale: LC_ALL: не может изменить локаль (en_US.UTF-8)"
  • Бесконечный цикл данных от dev / ttyUSB при отправке AT-команд
  • Заголовок вкладки терминала не работает корректно с помощью MacPorts bash
  • Nautilus: открыть папку в терминале при использовании tmux
  • Как просмотреть все команды, выполняемые текущим пользователем, во всех терминалах session / screen / byobu?
  • Добавить параметр только для терминала в Grub в Debian
  • Как программы выводятся в другое место, кроме STDOUT / STDERR? Как этого избежать?
  • Ctrl + c не будет убивать процесс
  • Как я могу отменить запущенный процесс и связать его с новой оболочкой экрана?
  • Как распечатать (числовые) значения ASCII каждого символа в файле?
  • Проблема с сокращением Tmux
  • Linux и Unix - лучшая ОС в мире.