私が実行している小さな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"
実行時に空であるか設定されていない場合、USER
bashは変数USER
を/usr/bin/id -run
。