Global bash_profile


20

Küresel ortam değişkenlerini ayarlamak için dosyalar /etc/profileve /etc/bashrcdosyalar olduğunun farkındayım ve belki de sadece amaçlarını yanlış anlıyorum, ama ...

Global bir bash_profiledosya var mı?

Mac OS X kullanıyorum

Yanıtlar:


15

Çağrılmaz bash_profile, ancak global bash yapılandırması için standart yer /etc/bash.bashrc. /etc/profileKabuk bash ise bunu aramak olağandır . Örneğin, benim /etc/profilevar:

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

Kullanım açısından, /etc/profileBourne uyumlu tüm mermiler (sh, bash, ksh, vb.) İçin sistem genelinde yapılandırma sağlar. /etc/bash_profileProfil dosyasının amacı giriş kabukları için davranışı kontrol etmek olduğundan normalde eşdeğer bir gereksinim yoktur . Normalde orada yapmak istediğiniz herhangi bir şey bash'a özgü olmayacaktır. /etc/bash.bashrcbash'a özgüdür ve hem giriş hem de giriş dışı mermiler için çalıştırılır.

Daha da karmaşık hale getirmek için, OS X'in bir tane bile yok gibi görünüyor /etc/bash.bashrc. Bu muhtemelen OS X'teki Terminallerin varsayılan olarak giriş kabukları olarak çalışmasıyla ilgilidir , bu nedenle ayrım kaybolur:

Terminal penceresi yönergelerine bir istisna, Mac OS X'in her yeni terminal penceresi için varsayılan olarak bir oturum açma kabuğu çalıştıran ve .bashrc yerine .bash_profile öğesini çağıran Terminal.app uygulamasıdır. Diğer GUI terminal emülatörleri aynı şeyi yapabilir, ancak çoğu bunu yapmaz.

OS X kullanmıyorum, bu yüzden bilgimin kapsamı burada bitiyor.


/etc/bash.bashrcEtkileşimli olmayan bir kabuktan okuma . /etc/profileetkileşimli olmayan kabuk tarafından okunabilir. Bkz Girişi Shell ve Non-Girişi Shell arasındaki Fark?
Gilles 'SO- kötü olmayı kes'

@Gilles - Burada hangi noktayı ifade etmeye çalıştığınız net değil. Etkileşimli olmayan bir giriş kabuğu gerçekten alışılmadık bir şeydir. Referans olarak, alıntıladığım kod benim kendi yaratımım değil. /etc/profileUbuntu 12.04'teki varsayılandan . Biri /etc/profileyalnızca bash altında yürütülen ve başka bir sh uyumlu kabuk olmayan bir tane isterse ne önerirsiniz ?
ire_and_curses

Sistem /etc/profilebenim sistem için dosya okur üstünde bir yorum içeriyor: # System-wide .profile for sh(1). Bunun anlamı mı profileis shözgü? Does shnasılsa önce çalıştırmak bash?

@Josh Voigts - shbir alt kümesidir bash. /etc/profileiçin yürütülür sh, bashve diğer tüm Bourne uyumlu kabuklar.
ire_and_curses

@ire_and_curses Dosyanın mac'ta /etc/bashrcdeğil , çağrıldığı anlaşılıyor /etc/bash.bashrc. Ayrıca koşmak /bin/shgibi görünüyor .
BrainStorm.exe


0

Global Etkileşimli Kabuk (Bash) Kurulumu

Bu yüklenmez /etc/profile, bu yüzden hiçbir şey /etc/profile.d/yüklenmez (giriş kabuklarının aksine, sonuna bakın).

Bunun için global dosya / etc / bashrc veya /etc/bash.bashrc'dir ( -DSYS_BASHRC=derleme zamanında ayarlanan bayrağa bağlı olarak ):

# 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"

Çatışmalardan kaçınmak için genellikle bu dosyayı olduğu gibi bırakmak (mümkün olduğunca) iyi bir fikirdir. Kullandığım strateji, giriş (/ etc / profile) kabuklarının kullandığı stratejiye benziyor.

Benim stratejim yukarıdaki dosyaya bir yükleyici eklemek:

# 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

Şimdi /etc/bashrc.d dizinine yeni .shfiles koyarak global interaktif (bash) kabuk dosyasına kolayca n özelleştirme ekleyebilirim.

Grep'i Global Olarak Renklendirin

/etc/bashrc.d/grep.sh

alias grep='grep --color=auto'

Bunu bu tek astarla yapabilirsiniz:

printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh

Karşılaştırma profili.d vs bashrc.d

Bunu okuduktan sonra ikna olmuyorsanız, kendinizi ikna etmek için bunu yapın:

printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh

Yeni bir terminal öykünücüsü açın ve grep kullanarak kullanıcı dizininizde "the" gibi bazı yaygın kelimeleri arayın

grep -r 'the'

Hiçbir şey renklendirilmemelidir. CTRLALTF1'i yaparak sanal bir konsolda da aynı şeyi yapın (X sunucunuzun büyük olasılıkla CTRLALTF7'de çalıştığını unutmayın, böylece geri dönebilirsiniz. Unutursanız, örneğin masaüstü yöneticinizi yeniden başlatın)

grep -r 'the' 

istendiği gibi renkli sonuçlar verecektir.

Hiçbir şey renklendirilmemelidir. Aynı şeyi sanal bir konsolda yaparak yapın CTRLALTF1(X sunucunuzun muhtemelen CTRLALTF7geri dönebilmeniz için çalıştığını unutmayın. Unutursanız, örneğin masaüstü yöneticinizi yeniden başlatın)

grep -r 'the' 

istendiği gibi renkli sonuçlar verecektir.

Bir giriş kabuğu, bir makineyi önyükleme veya sanal konsolları geçiş yaptığınızda ne olsun CTRLALTF1aracılığıyla FNthsanal konsola.

Giriş Kabuğu dosyaları /etc/profileyüklerken yüklenir /etc/profile.d/*.sh.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.