Dalam skrip bash kecil yang saya jalankan, saya mencoba mencari direktori baru yang dibuat. Aku sudah menambahkan:
sudo chown $USER:$USER /var/www/$sitename
sudo chmod 775 /var/www/$sitename
setelah baris di mana saya mkdir ( sudo mkdir /var/www/$sitename
).
Karena suatu alasan chown tidak mengeksekusi. Saya dapat menjalankannya secara manual tetapi ketika ditulis dalam file itu tidak berfungsi. Saya telah memperhatikan bahwa "chown" tidak disorot dalam warna yang sama dengan "mkdir" dan "chmod" tetapi saya tidak dapat memecahkan masalah saya.
Mengapa chown tidak berfungsi di sini?
Apakah ini masalah $USER:$USER
?
EDIT Berikut adalah skrip lengkapnya. Bagaimana cara saya meng-chown file ke pengguna non root mana saja yang menjalankan script?
#!/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"
bash
shell-script
terminal
gnome-terminal
chown
Alat Kuningan
sumber
sumber
getent group $USER
$USER
variabel diatur selama login interaktif. Bagaimana Anda menjalankan skrip Anda - dari sesi login atau menggunakan cron atau dari daemon?echo USER is $USER
, apa yang tercetak?USER is root
,. Dengan hasil edit yang saya buat, apakah Anda pikir Anda bisa menjelaskan cara meng-chown file ke pengguna non-root mana yang menjalankan skrip?Jawaban:
Jika, karena alasan tertentu,
$USER
tidak disetel, Anda dapat menggunakanid
perintah untuk mendapatkan identitas pengguna sebenarnya. Jadi saat pertama kali Anda menggunakan$USER
variabel, Anda dapat menggunakan ekspansi shell untuk memberikan nilai default. Ubahchown
baris dalam skrip Anda menjadi:Jika
USER
kosong atau tidak disetel saat ini dijalankan, bash akan mengaturUSER
variabel ke output dari/usr/bin/id -run
sumber
Ketika saya memanggil skrip saya dengan
sudo
itu akan diatur$USER
ke root.Saya mencoba
chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename
tetapi masih akan kembali root.Saya menemukan jika saya menggunakan
who
denganawk
saya bisa mendapatkan pengguna saat ini yang disebut skrip dengansudo
.sumber
currentuser
(kadang-kadang) dengan pengguna multiline, gunakan$(who | awk 'NR==1{print $1}')
saja.chown -R $currentuser:$currentuser /usr
- tidak bekerja - masih menunjukkan root: rootUntuk menyederhanakan masalah dan karena Anda mendapatkan nama variabel, mengapa Anda tidak membaca variabel nama pengguna?
Dengan itu Anda akan memastikan bahwa eksekusi skrip tidak tergantung pada variabel lingkungan yang disediakan saat skrip dieksekusi.
sumber
Hanya ada kesalahan kecil yang saya pikir. sudo membuka shell baru untuk mengeksekusi perintah dan setelah sudo pengguna root. Jadi mungkin Anda harus menggunakan sesuatu seperti ini:
karena saya pikir MYUSER bukan systemspezific ditimpa dan akan berfungsi.
sumber
echo chown...
dan lihat.)