Bash
使用 chown在小號和:_在小號和R:USER:使用者在 bash 腳本中
在我正在執行的一個小 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。我發現如果我使用
who
withawk
我能夠獲得呼叫腳本的目前使用者sudo
。currentuser=$(who | awk '{print $1}')} chown -R $currentuser:$currentuser /var/www/$sitename`