Saya ingin membuat skrip bash yang harus dijalankan dengan sudo tetapi harus memperhitungkan nama pengguna non-sudo yang mengeksekusinya. Jadi, jika pengguna bob
menjalankan sudo ./myscript.sh
saya ingin myscript.sh
tahu bob
adalah orang yang menjalankannya.
Mari kita lihat ke dalam myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Bagaimana saya bisa tahu nama pengguna yang menelurkan proses? Lebih khusus, apa yang harus saya gunakan daripada whoami
untuk mendapatkan bob
dan tidak root
?
bash
shell-script
sudo
users
marcio
sumber
sumber
USER=$(whoami)
. Perhatikan bahwaUSER
sudah ada sebagai variabel internal shell. Juga, jika skrip bash, jangan jalankan dengan menggunakansh
, yang hanya memiliki subset fitur yang kompatibel dengan POSIX.#!/usr/bin/env bash
di skrip bash saya.sh
atau sesuatu yang lain.Jawaban:
Saya tidak yakin bagaimana standarnya, tetapi setidaknya dalam sistem Ubuntu
sudo
menetapkan variabel lingkungan berikut (antara lain - lihatENVIRONMENT
bagian dari sudo manpage):sebagai contoh,
sumber
Jika Anda ingin itu berfungsi tanpa
sudo
juga, gunakan${SUDO_USER:-$USER}
. Sebagai contoh:Penjelasan
${var:-val}
akan diperluas ke$var
, kecuali jika tidak disetel atau kosong, dalam hal ini akan diperluas keval
.sumber