Ortam değişkenlerini ayarlamak için maalesef tamamen taşınabilir bir yer yok. En yakın gelen iki dosya ~/.profile
, geleneksel kurulum olan ve birçok kurulumda kutudan çıkan ve ~/.pam_environment
modern, sıradan fakat sınırlı bir alternatif.
Ne koymak ~/.pam_environment
Dosya ~/.pam_environment
, PAM kullanan ve bu dosyayı etkinleştiren tüm giriş yöntemleriyle okunur . Bu, günümüzde çoğu Linux sistemini kapsamaktadır.
En büyük avantajı ~/.pam_environment
(etkinleştirildiğinde) kullanıcının kabuğu başlamadan önce okunmasıdır, bu nedenle oturum türü, oturum açma kabuğu ve diğer karmaşıklıklardan bağımsız olarak çalışır. Hatta su -c somecommand
ve gibi etkileşimli olmayan girişler için bile çalışır ssh somecommand
.
Bunun ana sınırlaması, ~/.pam_environment
karmaşık kabuk sözdizimini değil, yalnızca basit atamaları koyabileceğinizdir. Bu dosyanın sözdizimi aşağıdaki gibidir.
- Dosyalar satır satır ayrıştırılır.
- Önde gelen beyaz boşluk yoksayılır.
- İsteğe bağlı olarak satırları
export
tek bir boşlukla başlatabilirsiniz (sekme değil, şekil git).
- Bundan sonra, her satır
VAR=VALUE
VAR'ın harflerden, rakamlardan ve alt çizgilerden oluştuğu forma sahip olmalıdır .
#
bir yorum başlatır, bir değerde görünemez.
- VALUE
'
veya ile başlıyorsa "
ve aynı bir fiyat teklifi içeriyorsa, VAR, tırnak işaretleri arasındaki dizeye ayarlanır (ikinci tekliften sonra gelen her şey yoksayılır). Aksi halde, VAR, =
işaretten sonra dizeye ayarlanır .
- Hayır
=
ise, değişken ortamdan kaldırılır.
Dolayısıyla, tersine, ~/.pam_environment
çok çeşitli koşullarda çalışır. Aşağı yönde, bir değişkenin değerini başka bir değişkene (örneğin PATH'ye bir dizin ekleyerek) temel almak veya bir komutun çıktısını kullanmak (örneğin, bir dizin veya program varsa test etmek) gibi bazı dinamik ayarlara sahip olamazsınız. karakterleri ( #'"
, newline) değeri koymak imkansız veya zahmetli.
Ne koymak ~/.profile
Bu dosya taşınabilir (POSIX) sh sözdizimine sahip olmalıdır. [[ … ]]
Sisteminizde bu kabukları bulunduğunu biliyorsanız, yalnızca ksh veya bash uzantılarını (diziler, vb.) Kullanın /bin/sh
.
Bu dosya otomatik uygulamalardaki komut dosyaları tarafından okunabilir, bu nedenle herhangi bir çıktı ya da çağrı üreten programları çağırmamalıdır exec
. Bunu metin modu oturum açmalarında yapmak istiyorsanız, yalnızca etkileşimli kabukları için yapın. Örnek:
case $- in *i*)
# Display a message if I have new mail
if mail -e; then echo 'You have new mail'; fi
# If zsh is available, and this looks like a text-mode login, run zsh
case "`ps $PPID` " in
*" login "*)
if type zsh >/dev/null 2>/dev/null; then exec zsh; fi;;
esac
esac
Bu, /bin/sh
giriş kabuğunuz olarak kullanmanın ve en sevdiğiniz kabuğunuza geçmenin bir örneğidir . Ayrıca sysadmin değiştirmeme izin vermediğinde, bash'ı giriş kabuğum olarak nasıl kullanabilirim
~/.profile
Grafiksel olmayan giriş bilgileri ne zaman okunmaz?
Farklı giriş kabukları, farklı dosyaları okur.
Giriş kabuğunuz bash ise
Bash okuyor ~/.bash_login
ya da ~/.bash_profile
varsa onlar var ~/.profile
. Ayrıca bash ~/.bashrc
, etkileşimli olsa bile bir giriş kabuğunda okunmaz . Bu tuhaflıkları bir daha asla hatırlamak zorunda kalmamak ~/.bash_profile
için aşağıdaki iki satırdan oluşan bir a oluşturun :
. ~/.profile
case $- in *i*) . ~/.bashrc;; esac
Ayrıca bakınız bash ile ortam değişkenlerini ayarlamak için hangi kurulum dosyaları kullanılmalıdır?
Giriş kabuğunuz zsh ise
Zsh okur ~/.zprofile
ve ~/.zlogin
ancak ~/.profile
. Zsh, sh'den farklı bir sözdizimine sahiptir, ancak ~/.profile
sh emülasyon modunda okuyabilir . Bunu sizin için kullanabilirsiniz ~/.zprofile
:
emulate sh -c '. ~/.profile'
Ayrıca bkz. Zsh ~ / .profile
Giriş kabuğunuz başka bir kabuksa
Orada yapabileceğiniz pek bir şey yok, /bin/sh
giriş kabuğunuz olarak ve en sevdiğiniz kabuğunuzu (balık gibi) yalnızca etkileşimli bir kabuk olarak kullanmanız çok kısa . Zsh ile yaptığım şey bu. 'Den başka bir kabuk çağırma örneği için yukarıya bakın ~/.profile
.
Uzaktan komutlar
Etkileşimli bir kabuktan geçmeden bir uzak komutu çağırırken, tüm kabukları başlangıç dosyasını okumaz.
Ksh, değişmeyi ENV
başarırsanız , değişken tarafından belirtilen dosyayı okur .
Bash okur ~/.bashrc
Çünkü eğer interaktif değil (!) Ve üst süreç denir rshd
ya sshd
. Böylece ~/.bashrc
ile başlayabilirsiniz
if [[ $- != *i* ]]; then
. ~/.profile
return
fi
Zsh ~/.zshenv
, başladığında her zaman okur . Dikkat edin, çünkü bu, diğer değişkenleri ayarladığınız bir alt kabuk olsa bile, her zsh örneği tarafından okunur. Eğer zsh giriş kabuğunuzsa ve sadece uzak komutlar için değişkenleri ayarlamak için kullanmak istiyorsanız, bir koruyucu kullanın: ~/.profile
gibi bir değişken ayarlayın MY_ENVIRONMENT_HAS_BEEN_SET=yes
ve okumadan önce bu korumayı kontrol edin ~/.profile
.
if [[ -z $MY_ENVIRONMENT_HAS_BEEN_SET ]]; then emulate sh -c '~/.profile'; fi
Grafiksel oturum açma durumu
Pek çok dağıtım, ekran yöneticisi ve masaüstü ortamı, çalıştırma ~/.profile
komutlarını açık bir şekilde başlangıç komut dosyalarından alarak veya bir giriş kabuğu çalıştırarak düzenler .
Ne yazık ki, ~/.profile
okunamayan distro / DM / DE kombinasyonlarını işlemek için genel bir yöntem yoktur .
Başladığınız geleneksel bir oturum kullanıyorsanız ~/.xsession
, ortam değişkenlerinizi ayarlamanız gereken yer burasıdır; kaynak yaparak ~/.profile
(yani . ~/.profile
) yapın. Bazı kurulumlarda, masaüstü ortamı başlangıç komut dosyalarının yeniden kaynaklanacağını unutmayın ~/.profile
.