Bash betiğini sudo olarak çalıştıran kullanıcının adı nasıl alınır?


17

Sudo ile yürütülmesi gereken ancak bunu yürüten sudo olmayan kullanıcının adını dikkate alması gereken bir bash betiği oluşturmak istiyorum. Yani kullanıcı bobçalışırsa sudo ./myscript.shben bunu yürütmek olduğunu myscript.shbilmek istiyorum bob.

İçine bakalım myscript.sh:

USER=$(whoami)
# Do something that takes into account the username.

Süreci oluşturan kullanıcının adını nasıl bilebilirim? Daha spesifik olarak, yerine ne kullanmalıyım whoamialmak bobdeğil root?


Bu geçerli bir senaryo değil, bence demek istedin USER=$(whoami). USERZaten bir kabuk iç değişkeni olarak var olduğunu unutmayın . O bir betik görüyorsunuz Ayrıca, eğer yok kullanarak çalıştırmak shsadece özellikleri bir POSIX uyumlu alt kümesini olan,.
nyuszika7h

neden düzenlemiyorsun? Şimdi düzeltildi.
marcio

Çok önemsiz, düzenlemelerin en az 6 karakter olması, en az önerilenler olması gerekir.
nyuszika7h

tamam anlıyorum. İpuçları için teşekkürler: DI genellikle #!/usr/bin/env bashbenim bash scriptlerimde böyle bir hashbang koydu .
marcio

Eğer açıkça shveya başka bir şey ile çağırırsanız hashbang yok sayılır .
nyuszika7h

Yanıtlar:


28

Ne kadar standart olduğundan emin değilim, ama en azından Ubuntu sistemlerinde sudoaşağıdaki ortam değişkenlerini ayarlar (diğerleri arasında - ENVIRONMENTsudo manpage'in bölümüne bakın ):

   SUDO_UID        Set to the user ID of the user who invoked sudo

   SUDO_USER       Set to the login of the user who invoked sudo

Örneğin,

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver

Test ettiğim tüm platformlarda beklendiği gibi çalışır: debian, fedora (redhat) ve freebsd. Teşekkürler!
marcio

Mac üzerinde çalıştığı onaylandı.
SiKing

Ubuntu üzerinde de çalışır.
Andi Jay

9

Bunun da olmadan çalışmasını istiyorsanız sudokullanın ${SUDO_USER:-$USER}. Örneğin:

printf '%s\n' "${SUDO_USER:-$USER}"

açıklama

${var:-val}$varayarlanmamış veya boş değilse genişler , bu durumda genişler val.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.