sudo komutu /root/.bashrc dosyasını desteklemiyor


27

PATH/Root/.bashrc dosyamda değişkene özel bir yol ekledim

Bunu yaptığımda sudo su; echo $PATH, '/ path / to / custom / bins' girişini gösterir.

Ama benim yaptığım sudo sh -c 'echo $PATH', gösterir, /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

.Bashrc dosyasına eklenen klasör yolları görünmüyor.

Sudo komutu kök kullanıcıyla aynı ortama sahip değil mi?

sudo  bashrc 

Yanıtlar:


32

.bashrcbash yapılandırma dosyasıdır, ancak etkileşimli olarak çalıştırıldığında. Sadece bash başlattığınızda yüklenir, başka bir programı çalıştırdığınızda shdeğil (bash adı aracılığıyla çağrılsa bile sh). Ve sadece bash etkileşimli olduğunda yüklenir, bir betik veya komut ile çalıştırıldığında değil -c.

sudo sh -c 'echo $PATH'veya sudo bash -c 'echo $PATH'etkileşimli bir kabuk çağırmaz, bu yüzden .bashrcdahil değildir.

sudo su; echo $PATHkök kabuğunun etkileşimli bir örneğini çalıştırır. Eğer bu bash ~root/.bashrcise, yüklenir. Bu kod parçası, echo $PATHbu etkileşimli kabuk sona erdiğinde yürütülür, bu nedenle etkileşimli kabukta ne olursa olsun, parçacığın sonunda ne yazdırdığını etkilemez. Ancak , echo $PATHbaşlatılan etkileşimli kabuğun istemine sudo suyazarsanız, tarafından ayarlanan değeri görürsünüz ~root/.bashrc.

Yana .bashrc(hatta bash bir tasarım kusur olduğunu etkileşimli giriş kabukları ile) değil giriş kabukları ile her etkileşimli kabukta çağrılır, bu ortam değişkenleri tanımlamak yanlış yerdir. .bashrcTuş ciltleri, takma adlar ve tamamlama ayarları gibi etkileşimli bash ayarları için kullanın . Ortam değişkenlerini, oturum açtığınızda yüklenen dosyalarda ayarlayın: ~/.pam_environmentveya ~/.profile.

Yani set PATHiçinde .profileyerine .bashrcve ya bir giriş ile kabuğu çalıştırmak sudo -i 'echo $PATH'veya açıkça kaynağı .profileile sudo sh -c '. ~/.profile; echo $PATH'.


1
kabukları hakkında birçok önemli noktaya değindi .... teşekkürler ....

1
Bunu nasıl eklerim .profile? Şunu musunuz /root/.profileyoksa /home/user/.profile? İkisine de eklemeye çalıştım export PATH=$PATH:/mydir. İşe yaramadı. Onsuz denedim export, bu da işe yaramadı.
falsePockets

@ falsePockets Ne için işe yaramadı? Yeni bir soru sormalı ve tam olarak ne yaptığınızı açıklamalısınız.
Gilles 'SO- kötülük yapmayı bırak'

İşe yaramayan şey OP'nin yapmaya çalıştığı şeyle tamamen aynı. Süper kullanıcımın YOLU'na bir dizin eklemeye çalışıyorum. Yeni bir soru sormamalıyım çünkü bu soru bu sorunun bir kopyası olacaktır.
falsePockets

@ falsePockets Ama açıkçası süper kullanıcı hesabına ulaşmak için aynı şeyi yapmıyorsunuz. Ne yaptığını söylemediğin için, cevabımdakileri tekrar etmekten başka sana yardım edemem.
Gilles 'SO- kötülükten vazgeç'

14

Bak -Eve -iseçenekler.

-E: Kullanıcının mevcut ortam değişkenlerini korumak istediği güvenlik politikasına işaret eder. Kullanıcı çevreyi koruma iznine sahip değilse güvenlik politikası hata verebilir.

-i: Hedef kullanıcının şifre veritabanı girişi tarafından belirtilen kabuğu bir giriş kabuğu olarak çalıştırın. Bu, .profile veya .login gibi girişe özgü kaynak dosyalarının kabuk tarafından okunacağı anlamına gelir. Bir komut belirtilirse, kabuğun -c seçeneği ile yürütülmek üzere kabuğa geçirilir. Hiçbir komut belirtilmezse, etkileşimli bir kabuk yürütülür. sudo, kabuğu çalıştırmadan önce bu kullanıcının ana dizinine geçmeye çalışır. Komut, kullanıcının giriş yaparken alacağıkine benzer bir ortamla çalıştırılır. Sudoers (5) kılavuzundaki Command ortam bölümü, -i seçeneğinin, sudoers politikası olduğunda bir komutun çalıştırıldığı ortamı nasıl etkilediğini belgelemektedir. kullanımda.


3

El ile sayfa / belgelerde belgelenen başlangıç ​​dosyalarını sudo bashokuyanlar olabilir . Ancak, ortam değişkenini doğru ayarlamayabileceğini lütfen unutmayın . Bu, sistem genelindeki başlangıç ​​dosyasında düzeltilebilir (içinde tam konum, dağıtıma bağlıdır) - 0 olup olmadığını test edin .bashbashHOMEbash/etc$uid

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.