Neden açtığım her terminalde ".profile" yazmam gerekiyor?


10

~/.profileUbuntu'daki bazı değişkenleri değiştirdiğimizde , komutu çalıştırırız source .profile. Daha sonra değişiklik sadece bu terminalde geçerlidir. Yeni bir terminal açarsak, komutu source .profiletekrar uygulamalıyız. Bu nedenle, farklı terminallerin aynı kullanıcıya ait olmalarına rağmen kendi ortamları var gibi görünüyor.

Her terminalin kendi çevre yoluna sahip olmasının avantajı nedir? Aynı kullanıcıya ait farklı terminalin aynı ortam değişkenini paylaşması daha iyi olurdu.



Oturum açma "kabuğunuz" bir GUI ise, GU'inizin yerine sh'ın oturum açma komut dosyasında var'ı ayarlamak çok yardımcı olmaz.
ikegami

Yanıtlar:


14

Bunun nedeni ~/.profilesadece giriş kabuklarından kaynaklanmaktadır. Yeni bir terminal penceresi açtığınızda, başlatılan kabuk varsayılan olarak oturum açma olmayan bir kabuktur. Oturumu kapatıp tekrar oturum açarsanız, yapılacak değişiklik ~/.profiletüm terminallerinizde etkili olacaktır, çünkü ~/.profileoturumunuza giriş yaptığınızda kaynaklanır.

Farklı terminal pencerelerinin farklı bir ortama sahip olması değil, kaynak kullanımı ~/.profilesadece ~/.profilegeçerli kabukta yürütülür ( sourcekomutun yaptığı tam olarak budur ).

Buna karşılık, yapılacak bir değişiklik, ~/.bashrcaçtığınız herhangi bir yeni terminal penceresini veya yazarak başlattığınız herhangi bir Bash kabuğunu hemen etkiler bash, çünkü tüm etkileşimli Bash kabuklarından kaynaklanır.


3

Ortam değişkenleri sadece kullanıcı tercihleri ​​için değildir. Bunlar, bir üst süreçten başlatılan alt süreçlere çeşitli ayar bilgilerini iletmek için genel bir mekanizmadır.

Bir işlemin yalnızca başladığı işlemleri etkilemek için belirli ortam değişkenleri ayarlayacağı çok sayıda durum vardır . Örneğin, bir komut dosyası, başlattığı komutların yerel ayarlarını kasıtlı olarak sıfırlayabilir, böylece bunlardan çıktıları ayrıştırabilir. Birçok büyük yazılım paketi için yapı komut dosyaları, makeortam değişkenleri aracılığıyla bu koordinatın iç içe çağrılarını kullanır . Özelleştirilmiş araçların $ LD_PRELOAD veya $ PATH ile hile yaparak başlattıkları diğer programların çalışma koşullarını değiştirmesi gerekebilir.

Bir kullanıcının başka bir pencerede uzun bir derleme çalışırken yaptığı bir şey, arkasındaki tüm süreçlerin ortam değişkenlerini sihirli bir şekilde değiştirirse , delilik ve kaos ortaya çıkar.

Diğer ortam değişkenleri, bir işlemin başlatıldığı belirli oturum hakkında bilgi içerir. Programlar, $ TERM'in bağlı oldukları terminalin (veya terminal öykünücüsünün) komut setini tanımlamasını bekler; genel bir kullanıcı başına ayarın, birkaç farklı terminal türüyle aynı sisteme giriş yapmayı imkansız hale getirmesi. Tek bir terminal donanımınız olsa ve asla uzaktan oturum açmasanız bile, programlar screen, oturumları içinde çalışan işlemler için farklı bir $ TERM ayarlamaya bağlıdır.

Daha iyi bir soru, kullanıcı başına veri tabanı yerine kullanıcı tercihi ayarları için neden bir süreç-alt süreç iletişim mekanizması kullanıyoruz?

Cevap: Yeterince iyi çalıştığı ve kullanıcı başına veritabanı oluşturmanın faydaları , ortam değişkenleri yerine bunu kullanmak için her şeyi değiştirme işinin yapılacağı kadar büyük değildir .

Orada nerede (Ben çok az tercih ayarlarıyla düşünebiliriz olmaz örneğin, sadece tek bir komut yürütmek için onları değiştirmek için uygundur bazı kullanım durumlarını olmak. So sırayla değil kaybetmek işlevselliğine, her şey hala olması gerekir geçersiz kılınabilir tarafından daha fazla karmaşıklık ve daha karışık kullanıcılarla sonuçlanan ortam değişkenleri).

Alternatifleri yok sanki değil var . Örneğin, X kaynakları işlem yerine görüntüleme oturumu başınadır. Ama komut satırı programları için erişilmesi zor - ve komut satırı programları genellikle bile yok uzaktan erişim için çalışmalara ihtiyaç vardır bağlanmak için bir X sunucusu.

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.