Использование 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 не перезаписывается системой и не работает.

  • Создание межтерминальных приложений для Linux-систем
  • Ошибка обновления Yum: не удалось получить зеркальный список
  • exec -t недействителен
  • grep также возвращает не соответствующие строки
  • Не удалось распечатать awk'ed datum в сценарии bash
  • Как исправить нечетные escape-последовательности командной строки (ps1) после удаленного входа в iTerm2
  • Dotfile не работает в текущей оболочке, нужен новый
  • Как начать cinelerra на Debian?
  • Alt-Left для пропуска слов не работает в эмуляторах терминалов
  • UNIX be-spoke Shell-Script / Команды
  • Неясно, где идет выход bash
  • Interesting Posts

    Как увидеть свободное место на диске SunOS?

    Как настроить NoMachine 4.0.369 для OS X для подключения к freenx-серверу на Fedora 20?

    Как остановить bash из файлов с проверкой синтаксиса?

    Escape-символы из эха -э

    Прокрутите по 384 парам и создайте 384 новых конкатенированных файла

    подсветка синтаксиса zsh для файлов

    Как отсоединить диск в Linux (имитировать сбой раздела / диска)?

    Перенаправление запроса на устройство в режиме точки доступа

    Как убедиться, что загрузочный диск Linux не работает

    SED: вставить что-то после второй последней строки?

    Есть ли способ предотвратить выполнение процесса, не связанного с терминалом, «кто» внутри моего .envfile?

    Почему нет единого унифицированного менеджера пакетов для Linux?

    Вставьте слово в первую строку файла

    Могут ли символические ссылки охватывать разные файловые системы в Unix или Linux?

    подстановка команды внутри awk

    Linux и Unix - лучшая ОС в мире.