Jawaban:
Itu tidak dipanggil bash_profile
, tetapi tempat standar untuk konfigurasi global bash adalah /etc/bash.bashrc
. Biasa disebut ini /etc/profile
jika shellnya bash. Misalnya, di saya, /etc/profile
saya punya:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
Dalam hal penggunaan, /etc/profile
menyediakan konfigurasi seluruh sistem untuk semua shell Bourne yang kompatibel (sh, bash, ksh, dll.). Biasanya tidak diperlukan untuk yang setara /etc/bash_profile
, karena maksud dari file profil adalah untuk mengontrol perilaku shell masuk. Biasanya apa pun yang ingin Anda lakukan di sana tidak akan spesifik untuk bash. /etc/bash.bashrc
khusus untuk bash, dan akan dijalankan untuk shell login maupun non-login.
Untuk lebih rumit, sepertinya OS X bahkan tidak punya /etc/bash.bashrc
. Ini mungkin terkait dengan fakta bahwa Terminal di OS X default untuk berjalan sebagai shell login , sehingga perbedaannya hilang:
Pengecualian untuk pedoman jendela terminal adalah Terminal.app Mac OS X, yang menjalankan shell login secara default untuk setiap jendela terminal baru, dengan memanggil .bash_profile alih-alih .bashrc. Emulator terminal GUI lain mungkin melakukan hal yang sama, tetapi kebanyakan cenderung tidak.
Saya tidak menjalankan OS X, jadi sejauh pengetahuan saya berakhir di sana.
/etc/profile
di Ubuntu 12.04. Apa yang akan Anda sarankan jika seseorang menginginkan /etc/profile
yang dieksekusi hanya di bawah bash, dan tidak ada shell yang kompatibel dengan sh lainnya?
/etc/profile
file untuk sistem saya berisi komentar di bagian atas yang berbunyi: # System-wide .profile for sh(1)
. Apakah rata profile
- rata ini sh
spesifik? Apakah sh
entah bagaimana berjalan sebelumnya bash
?
sh
adalah bagian dari bash
. /etc/profile
dieksekusi untuk sh
,, bash
dan semua shell yang kompatibel dengan Bourne.
/etc/bashrc
di mac, bukan /etc/bash.bashrc
. Tampaknya juga berjalan untuk /bin/sh
.
/etc/profile
adalah global bash_profile
. Tidak ada file yang spesifik untuk bash, bash hanya membaca file standar yang dibaca oleh semua shell Bourne-style. Di situlah Anda dapat mengatur variabel lingkungan sistem-lebar.
Lihat Apakah ada file setara ".bashrc" yang dibaca oleh semua shell? untuk tinjauan umum tentang file startup umum bash.
Ini tidak memuat /etc/profile
, jadi tidak ada dalam/etc/profile.d/
dimuat (tidak seperti shell login, lihat akhirnya).
File global untuk ini adalah / etc / bashrc atau /etc/bash.bashrc (tergantung pada -DSYS_BASHRC=
flag yang ditetapkan pada waktu kompilasi):
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
return
fi
PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
Biasanya adalah ide yang baik untuk membiarkan file ini apa adanya (sebanyak mungkin) untuk menghindari konflik. Strategi yang saya gunakan mirip dengan yang digunakan shell (/ etc / profile).
Strategi saya adalah menambahkan loader ke file di atas:
# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d
# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
for script in /etc/bashrc.d/*.sh; do
test -r "$script" && . "$script"
done
unset item
fi
EOF
Sekarang saya dapat dengan mudah menambahkan n kustomisasi ke file shell global interaktif (bash) dengan memasukkan .shfiles baru ke direktori /etc/bashrc.d.
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
Anda dapat melakukan ini dengan liner satu ini:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
Jika, setelah membaca ini, Anda tetap tidak yakin, lakukan ini untuk meyakinkan diri sendiri:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
Buka emulator terminal baru dan cari beberapa kata umum di direktori pengguna Anda seperti "the" menggunakan grep
grep -r 'the'
Tidak ada yang harus diwarnai. Lakukan hal yang sama di konsol virtual dengan melakukan CTRLALTF1 (ingat bahwa server X Anda mungkin berjalan di CTRLALTF7 sehingga Anda dapat beralih kembali. Jika Anda lupa, cukup restart desktop manager Anda, misalnya)
grep -r 'the'
akan menghasilkan hasil berwarna seperti yang diinginkan.
Tidak ada yang harus diwarnai. Lakukan hal yang sama di konsol virtual dengan melakukan CTRLALTF1(ingat bahwa server X Anda mungkin berjalan pada CTRLALTF7sehingga Anda dapat beralih kembali. Jika Anda lupa, cukup restart manajer desktop Anda, misalnya)
grep -r 'the'
akan menghasilkan hasil berwarna seperti yang diinginkan.
Sebuah shell login adalah apa yang Anda dapatkan ketika Anda boot mesin atau switch konsol virtual dengan CTRLALTF1melaluiFNth virtual konsol virtual.
Login Shell memuat /etc/profile
sambil memuat /etc/profile.d/*.sh
file.
/etc/bash.bashrc
dari shell yang tidak interaktif./etc/profile
dapat dibaca oleh shell non-interaktif. Lihat Perbedaan antara Shell Login dan Shell Non-Login?