Diğer kullanıcının ortam değişkenini al [kapalı]


23

Başka bir kullanıcının ortam değişkenini görebilmemin bir yolu var mı? Bunu kök olarak yapmak istiyorum, bu yüzden izinler sanırım bir sorun olmayacak.

Kullanıcının kendisi için, echo $PATHveya set | grep PATH(veya setdeğişken adını hatırlamadığımda) kullanıyorum. Başka bir kullanıcı için benzer bir talimat nedir?

Değeri için Ubuntu Server 13.04 kullanıyorum.


4
Kullanıcıların ortam değişkenleri yok, süreçler var. Bir kullanıcı tarafından yürütülen işlemlerin hepsinin aynı ortama sahip olmaması yaygındır. Ne problemi çözmeye çalışıyorsun?
Gilles 'SO- kötü olmayı bırak'

Örneğin @Gilles, bir kullanıcının hangi MAIL klasörüne sahip olduğunu bilmek istiyorum. Bu kullanıcı olarak giriş yapabilir echo $MAIL, sonra yapabilirim , ama bir kısayol olabileceğini düşündüm.

3
Bu hala soruyu yararlı bir şekilde tanımlamamaktadır (örneğin, kabul ettiğiniz cevap birçok faktöre bağlı olarak işe yarayabilir veya çalışmayabilir). Varsayılan posta kutusu konumunu mu arıyorsunuz? Kullanıcının kendi yerel postasını aldığı yeri mi arıyorsunuz (kullanıcının bir farklı olması durumunda farklı olabilir ve olmayabilir .forward)? Kullanıcılar genellikle kendi .profileveya diğer yapılandırma dosyalarında birkaç değişken ayarlar ve bunların tümünü güvenilir şekilde numaralandırmanın bir yolu yoktur. Yine, hangi sorunu çözmeye çalışıyorsunuz?
Gilles 'SO- kötü olmayı kes'

Yanıtlar:


20

Başka bir seçenek kullanmaktır env. Bunu şu şekilde çalıştırın root:

sudo -Hiu $user env | grep $var

Örneğin

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon

1
Kök olarak oturum açtığımda ve standart kullanıcı adım için bu komutu yürüttüğümde alıyorum HOME=/root. Bu kökün başlangıç dizini var, ama bu değil benim standart ev dizini. Belirli bir kullanıcının oturum açtığında alacağı ortamı bilmek istiyorsanız, bu kullanıcının oturum açma kabuğunun başlangıç ​​komut dosyalarını çalıştırmanız gerekir (ve oturum açma kabuğunun oturum açma kabuğunuzdan farklı olabileceğini unutmayın).
Uwe

@ Hangi sistem üzerinde çalışıyoruz? Benim için iyi çalışıyor. rootGiriş yöneticisinden olduğu gibi giriş yaptığınız anlamına mı geliyor ? Bir tty'ye düşer ve olarak giriş yaparsam iyi çalışır root.
terdon

Debian makinesindeyim. Uwe olarak giriş yapıyorum, bir xterm açıyorum, koşuyorum env | grep HOMEve alıyorum HOME=/home/uwe; Ben yürütmek suve sonra bir kez daha env | grep HOMEve almak HOME=/rootsonra çalıştırın sudo -u uwe env | grep HOMEolsun hala ve HOME=/root.
Uwe

@uwe garip. Ayrıca Debian (LMDE) bir makinedeyim, tarif ettiğinizle aynı işlemi yaptım ( xtermnormal terminalim yerine bile kullanıldım ) ve beklenen sonucu elde ettim.
terdon

Kılavuza göre sudoHOME değişkenini yalnızca -Hseçenek varsa veya ilgili giriş /etc/sudoersayarlanmışsa ayarlar. Sudoers dosyalarımız farklı görünüyor. Her neyse, -Hburada ve muhtemelen de kullanmak muhtemelen iyi bir fikirdir -i.
Uwe

2

Bir kullanıcı için şunları yapabilirsiniz:

su - <username> -c '. ~/.profile; echo $PATH'

Tüm kullanıcının $ PATH listesini:

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@Camil Staps

. ~/.profilebu yüzden en sevdiğim kişi Peteris Krumins'den öğrendiğim bir numara. Hile açıkladıBurada . Belki daha sonra bash versiyonu seçeneği ile bina vardı NON_INTERACTIVE_LOGIN_SHELLS.


Teşekkürler! Çünkü parçası $PATHolmadan da çalışır . ~/.profile; - ne için?

@CamilStaps "Çalışıyor" ile ne demek istiyorsun? Evet, $PATHkaynak kullanmadan bile bir değer elde edersiniz ~/.profile, ancak neredeyse kesinlikle istediğiniz bir değer değildir (= bu kullanıcının giriş yaptığında göreceği değer). ~/.profileKullanıcı, başlangıç ​​dosyası farklı olan bir kabuk kullanabileceğinden, kaynak sağlama bile tam olarak güvenilir değildir ~/.profile.
Uwe

@Üsteksiz aynı çıktıyı aldım, ama sanırım bu sadece bir tesadüf.

Kullanıcının csh kullanmadığını varsayıyorsunuz.
glenn jackman

@CamilStaps İlk soru, söz konusu kullanıcının PATH'sını hiç değiştirip değiştirmediğidir ~/.profile. Ancak her durumda, davranışı sudooldukça fazla yapılandırılabilir /etc/sudoers(terdon ile yaptığım tartışmaya bakın), bu nedenle sistemlerimiz farklı davrandığında, muhtemelen yapılandırma dosyalarındaki farklılıklardan kaynaklanır.
Uwe

0

Kökten su -kullanıcıya yapabilirsiniz ve ardından görmek istediğiniz ortam değişkenini grep edebilirsiniz:

su - <username> -c 'echo $PATH'


çünkü komut farklı bir kullanıcı olarak çalıştırılsa bile bu benim için çalışmaz. Ben "env" kullanarak sona erdi, sth gibi runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2benim için iyi çalışıyor. Kök değilseniz, komutun önüne ön ek eklemeniz gerekir sudo.
Andrei-Niculae Petre
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.