Bisakah saya mengakses variabel $ USER yang berasal dari dalam skrip yang dijalankan dengan `sudo`?

19

Pertanyaan aneh, saya tahu. Ini skripnya:

echo $USER

Inilah perintah yang saya gunakan untuk menjalankannya:

sudo ./myscript.sh

Sekarang ini mencetak "root" tetapi saya ingin mencetak jon, nama pengguna saya. Apakah ada cara untuk melakukan itu dengan mengubah skrip, dan bukan perintah?

Jonathan
sumber
Ya, ada cara untuk melakukannya. Tapi mungkin cara termudah adalah mengatasinya. Panggil skrip itu dari skrip lain, tempat Anda 'menyimpan' id pengguna Anda sehingga 'skrip sudo' dapat mengaksesnya.
sudodus

Jawaban:

28

Gunakan SUDO_USERvariabel lingkungan sebagai ganti USER.

sudomenempatkan nama pengguna yang menjalankannya di SUDO_USERvariabel lingkungan:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

Jadi Anda cukup mengganti $USERdengan $SUDO_USERdalam skrip Anda:

echo $SUDO_USER

Bacaan lebih lanjut

Eliah Kagan
sumber