Bash tidak memuat '.profile' di sesi baru di Linux

22

Saya sedang menyiapkan mesin Linux baru yang saya dapatkan dari departemen TI kami, dan perhatikan .profiletidak dimuat ketika saya memulai sesi terminal baru. Shell saat ini adalah Bash , meskipun saya mengubahnya dari sh default yang datang dengannya. Bagaimana saya membuatnya dimuat .profilesaat startup?

Saya mengakses shell melalui SSH : ssh myusername@remotemachine. Saya memiliki hak administrator di dalamnya.

Sa125
sumber
Tunjukkan kami perintah yang Anda gunakan untuk memulai shell Anda.
Nifle

Jawaban:

24

Ketika Bash dimulai sebagai shell login interaktif, salah satu file yang dapat diproses adalah ~/.profile.

Ketika dimulai sebagai shell non-login interaktif, itu tidak. Itu proses /etc/bash.bashrc(jika file itu atau file serupa diaktifkan di versi Bash Anda) dan ~/.bashrc.

Anda bisa menambahkan yang berikut ke ~/.bashrc(tetapi hati-hati dengan loop atau nilai yang diubah secara tidak sengaja):

. $HOME/.profile
Dijeda sampai pemberitahuan lebih lanjut.
sumber
8
Jika Anda akan mendapatkan. Tetapkan beberapa variabel penjaga atau lebih [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka
2
Ya, saya juga tidak merekomendasikannya.
Dijeda sampai pemberitahuan lebih lanjut.
12
Shell login akan mencoba ~ / .bash_profile, ~ / .bash_login dan ~ / .profile secara berurutan dan hanya buka yang pertama ditemukan.
Beano
3
Seperti yang orang lain katakan, ini BUKAN direkomendasikan, karena cara biasa adalah untuk profil dan "teman" (.bash_profile) ke sumber .bashrc, dan bukan sebaliknya. Bisa jadi program terminal Anda BUKAN shell login, tetapi shell non-login interaktif. Seringkali ada preferensi yang dapat Anda atur - menjadikannya shell login untuk mendapatkan .profile, .login, dan / atau .bash_profile untuk dieksekusi.
rholmes
15

Ini tergantung bagaimana Anda memulai shell. Seperti yang orang lain katakan, shell login akan memuat profil Anda (ia akan mencari .bash_profile terlebih dahulu, kemudian akan mencoba .profile). Jika ia menemukan salah satunya, ia akan memuatnya. Shell non-login (baik interaktif atau non-interaktif) akan sumber .bashrc.

Saya sarankan memasukkan semuanya ke .bashrc. Perpecahan .profile / .bashrc agak arbitrer dan lebih masuk akal di masa lalu UNIX ketika tty bukan hanya nama perangkat dan berarti TeleType yang sebenarnya. Itu dimaksudkan untuk memulai hal-hal tertentu (seperti memeriksa surat) pada login 'utama' ke server, dan hanya pengaturan normal untuk shell lainnya. Di sebagian besar Linux Anda akan masuk sekarang, Anda tidak benar-benar masuk ke shell, karena Anda masuk ke beberapa antarmuka grafis (KDE, gnome, CDE 'shudder'). "Proses masuk spawn" sekarang ditangani oleh manajer sesi Anda. Ini jauh kurang relevan sekarang.

Saran saya: Jadikan profil Anda hanya terdiri dari:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

sebagai baris pertama .bashrc, waspadai hal-hal aneh yang terjadi ketika menjalankan skrip bash dengan melompat lebih awal:

[[ $- != *i* ]] && return
Homolka yang kaya
sumber
5
.profileharus dijaga agnostik pesta. Saya sarankan untuk mengkonfigurasi .bash_profileuntuk memuat .profiledan memuat .bashrc. hanya memasukkan barang-barang agnostik ke dalam .profile, suka PATHdan LC_*barang - barang. Masukkan sisanya .bashrc.
lesmana
@ Rich Homolka Mengapa [-f $ HOME / .bashrc] dua kali dalam perintah Anda? Bagaimana perintah yang Anda posting berbeda dari hanya '. $ HOME / .bashrc '?
David Doria
1
Protip: Jangan menaruh apa pun di .bashrc Anda yang menulis ke stdout atau stderr, karena itu dapat merusak klien non-interaktif untuk hal-hal seperti SCP. Hal-hal dengan output (misalnya, saya suka disambut dengan kue keberuntungan dan waktu aktif) hanya boleh masuk .profile / .bash_profile
Brian A. Henning
@Laryaryx benar. Kami memiliki standar-ish kshrc yang diekspor ke stdout, pecah Xserver (melebihi burung kolibri)
Rich Homolka