Bra*_*tus 11 bash terminal shell-script gnome-terminal chown
在我正在运行的一个小 bash 脚本中,我试图创建一个新目录。我已经添加:
sudo chown $USER:$USER /var/www/$sitename
sudo chmod 775 /var/www/$sitename
Run Code Online (Sandbox Code Playgroud)
在我 mkdir ( sudo mkdir /var/www/$sitename
)所在的行之后。
由于某种原因,chown 没有执行。我可以手动执行它,但是当写入文件时它不起作用。我注意到“chown”没有以与“mkdir”和“chmod”相同的颜色突出显示,但我无法弄清楚我的问题。
为什么 chown 不在这里工作?
有问题$USER:$USER
吗?
编辑 这是完整的脚本。我如何将文件 chown 给执行脚本的任何非 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"
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因$USER
未设置,则可以使用该id
命令获取真实用户的身份。因此,第一次使用该$USER
变量时,可以使用 shell 扩展来提供默认值。chown
将脚本中的行更改为:
sudo chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename
Run Code Online (Sandbox Code Playgroud)
如果USER
在运行时为空或未设置,bash 会将USER
变量设置为/usr/bin/id -run
小智 5
当我用它调用我的脚本时,sudo
它将设置$USER
为 root。
$ sudo ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
我尝试过,chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename
但它仍然会返回root。
我发现如果我使用who
withawk
我能够获取使用 调用脚本的当前用户sudo
。
currentuser=$(who | awk '{print $1}')}
chown -R $currentuser:$currentuser /var/www/$sitename`
Run Code Online (Sandbox Code Playgroud)