Apakah ada file Bash yang akan selalu bersumber dalam mode interaktif tidak peduli apakah itu login atau non-login?

10

Sejauh yang saya tahu, shell interaktif mungkin masuk atau tidak masuk, dan file start up untuk mereka berbeda.

  • Jika + interaktif shell login → /etc/profilemaka dibaca pertama ~/.bash_profile, ~/.bash_logindan~/.profile
  • Jika shell interaktif + non-login → /etc/bash.bashrckemudian~/.bashrc

Saya ingin mengatur beberapa variabel setiap kali saya menggunakan shell interaktif terlepas dari apakah itu shell login atau tidak.

S182
sumber
1
@ strugee Tidak, pertanyaan ini bukan tentang variabel lingkungan.
Gilles 'SANGAT berhenti menjadi jahat'
@ Gilles ya, tapi jawaban Anda berlaku sama baiknya.
strugee
1
@ Strugee Itu karena saya melampaui pertanyaan langsung dan menyentuh topik sampingan. Satu paragraf dalam satu jawaban tidak membuat duplikat. Pertanyaan hanya duplikat jika mereka memiliki jawaban yang pada dasarnya identik, bukan jika satu jawaban kebetulan mengandung cukup banyak bahan untuk menjawab yang kedua.
Gilles 'SO- stop being evil'

Jawaban:

10

Tidak, tidak ada. Ya, ini adalah cacat desain.

Gunakan konten berikut di ~/.bash_profile:

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

Waspadalah bahwa bash memiliki quirk yang lebih aneh: ketika itu adalah shell login non-interaktif dan proses induknya adalah rshdatau sshd, sumber bash ~/.bashrc(tetapi tidak ~/.bash_profileatau ~/.profile). Jadi, Anda mungkin ingin meletakkan ini di atas .bashrc:

if [[ $- != *i* ]]; then return; fi

Lihat juga Perbedaan antara .bashrc dan .bash_profile dan Perbedaan antara Login Shell dan Non-Login Shell?

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Keanehan tersebut adalah untuk alasan keamanan (jangan memuat file yang tidak terduga saat berjalan dalam pengaturan yang peka terhadap keamanan).
vonbrand
2
@vonbrand Er, apa? Tidak, kebiasaan ini sama sekali tidak ada hubungannya dengan keamanan. Tidak ada "file tak terduga" yang terlibat (kecuali bahwa memuat .bashrcdalam pengaturan non-interaktif sebenarnya dapat dianggap sebagai tidak terduga), atau pemeriksaan apa pun dari konteks sensitif-keamanan.
Gilles 'SO- stop being evil'
Apakah ini metode untuk mencegah loop?
Braiam
1
@Braiam Apa loop?
Gilles 'SO- stop being evil'