Cara sederhananya adalah menciptakan mesin waktu, mengunjungi berbagai orang yang merancang file startup shell dan menyuruh mereka untuk membedakan antara tiga hal:
- pengaturan sesi, misalnya variabel lingkungan;
- peluncuran sesi, misalnya, misalnya memulai shell baris perintah atau manajer jendela atau menjalankan
startx
;
- inisialisasi shell, misalnya alias, prompt, binding kunci.
Tidak terlalu sulit untuk mendapatkan sesi vs shell dengan cara yang portabel: inisialisasi waktu masuk masuk ke .profile
(atau .zprofile
, .login
), inisialisasi shell masuk .bashrc
atau .zshrc
. Saya sebelumnya telah menulis tentang .bash_profile
, zsh vs shell lainnya , lebih banyak tentang portabilitas (kebanyakan tentang bash) , lebih banyak tentang siapa yang membaca.profile
.
Masalah yang tersisa adalah membedakan antara pengaturan sesi dan peluncuran sesi. Dalam kebanyakan kasus, ~/.profile
dieksekusi ketika Anda masuk dan dapat menggandakan keduanya, tetapi ada pengecualian:
- Jika shell login Anda adalah (t) csh atau zsh,
~/.login
dan ~/.zprofile
bukan bersumber ~/.profile
. Ditto untuk bash dan ~/.bash_profile
, tapi ini mudah diselesaikan dengan sumber ~/.profile
dari ~/.bash_profile
.
- Jika Anda masuk di bawah manajer tampilan (xdm, gdm, kdm, ...), apakah Anda
~/.profile
membaca tergantung pada versi program, pada distribusi Anda (Linux atau yang lain), dan pada tipe sesi apa yang Anda pilih.
- Jika Anda mengandalkan manajer tampilan untuk memulai sesi untuk Anda, Anda
.profile
harus mengatur variabel lingkungan tetapi tidak memulai sesi (misalnya manajer jendela).
- File konfigurasi tradisional untuk sesi X adalah
~/.xsession
, melakukan pengaturan sesi dan peluncuran sesi. Jadi file tersebut pada dasarnya . ~/.xsession; . ~/.xinitrc
. Beberapa sumber distribusi ~/.profile
sebelumnya ~/.xsession
. Sumber distribusi modern hanya ~/.xsession
ketika Anda memilih sesi "kustom" dari manajer tampilan, dan sesi seperti itu tidak selalu tersedia.
- Manajer sesi Anda mungkin memiliki cara sendiri untuk mengatur variabel lingkungan. (Itu adalah bagian opsional dari lingkungan desktop Anda, yang dipilih oleh Anda melalui file konfigurasi atau dengan memilih jenis sesi saat masuk; jangan bingung dengan skrip startup sesi yang disediakan oleh manajer tampilan, yang dieksekusi di bawah pengguna Anda tetapi dipilih berdasarkan sistem. Ya, ini berantakan.)
Singkatnya, ~/.profile
adalah tempat yang tepat untuk variabel lingkungan. Jika tidak dibaca, coba sumber dari ~/.xsession
(dan mulai program X Anda dari sana), atau cari metode khusus sistem (yang mungkin tergantung pada distribusi Anda, manajer tampilan jika ada, jenis sesi jika manajer tampilan, dan lingkungan desktop atau manajer sesi).
.profile
tidak dimuat sama sekali, atau ada sesuatu yang menimpa variabel lokal? (Coba tetapkan beberapa variabel lain sepertiexport MACIEJ_PROFILE=yes
memastikan.set -x
Di.profile
dapat menjadi cara yang baik untuk memeriksa apa yang sedang dieksekusi dalam dan setelah.profile
, jika itu dibaca sama sekali.) Tidak ada gunanya dalam sumber.profile
dari.zshrc
.