Bash

使用 chown在小號和:_在小號和R:USER:使用者在 bash 腳本中

  • August 21, 2016

在我正在執行的一個小 bash 腳本中,我試圖創建一個新目錄。我已經添加:

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

在我 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"

如果由於某種原因$USER未設置,則可以使用該id命令獲取真實使用者的身份。所以當你第一次使用這個$USER變數時,你可以使用 shell 擴展來提供一個預設值。chown將腳本中的行更改為:

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

如果USER執行時為空或未設置,bash 會將USER變數設置為/usr/bin/id -run

當我用它呼叫我的腳本時sudo,它將設置$USER為 root。

$ sudo ./myscript.sh

我試過了,chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename但它仍然會返回root。

我發現如果我使用whowithawk我能夠獲得呼叫腳本的目前使用者sudo

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

引用自:https://unix.stackexchange.com/questions/183183