bashスクリプトでchown $USER:$USERを使用する

bashスクリプトでchown $USER:$USERを使用する

私が実行している小さな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

編集する 以下は完全なスクリプトです。スクリプトを実行している root 以外のユーザーにファイルをどのように chown しますか?

#!/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"

ベストアンサー1

何らかの理由で$USER設定されていない場合は、このidコマンドを使用して実際のユーザーの身元を取得できます。したがって、シェル拡張を使用して、変数が最初に使用されたときに$USERデフォルト値を提供できます。chownスクリプトの行を次のように変更します。

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

実行時に空であるか設定されていない場合、USERbashは変数USER/usr/bin/id -run

おすすめ記事