Tüm mermiler tarafından okunan “.bashrc” eşdeğeri bir dosya var mı?


105

~/.bashrc Kullanıcıya özel ortam değişkenlerini, takma adları, PATHdeğişkende yapılan değişiklikleri vb . Belirtmek için tek yer var mı ?

Soruyorum çünkü bu görünüşte ~/.bashrcgörünüyor bash, ancak diğer mermiler de var…

Yanıtlar:


94

Dosya $HOME/.profilebash, sh, çizgi ve muhtemelen diğerleri de dahil olmak üzere bir dizi kabuk tarafından kullanılır.

Beşinci adam sayfasından:

Bash etkileşimli bir giriş kabuğu olarak çağrıldığında ... ... eğer varsa, önce / etc / profile dosyasındaki komutları okur ve çalıştırır. Bu dosyayı okuduktan sonra, bu sırayla ~ / .bash_profile, ~ / .bash_login ve ~ / .profile ifadelerini arar ve var olan ve okunabilen ilk komuttan komutları okur ve yürütür.

csh ve tcsh açıkça bakmıyorlar ~/.profileama bu kabukları biraz eskimiş.


7
Varsayılan olarak Zsh .profile dosyasını okumaz. Bu yüzden bunu belirterek önceki cevabımı sildim. Zsh, yalnızca .profile dosyasını, sh adında sembolik bir bağlantı tarafından çağrıldığında okur.
fschmitt

10
tcsh hala bazı ortamlarda popüler.
Maciej Piechotka

1
fschmitt: düzeltme için teşekkürler; sabit. Maciej Piechotka: Bunun doğru olduğundan şüphem yok; ancak, altında çalıştıkları kabuğa göre belirli diğer rc komut dosyalarını içe aktaran * rc komut dosyalarını oluşturmak da mümkündür (karmaşıktır).
msn

1
Bu şekilde çalışabilmesi için kullanıcıların her kabuğun bir giriş kabuğu olduğundan emin olmaları gerekir. Örneğin, Gnome Terminali'nde Profil -> Başlık ve Komut'a gidin ve etkinleştirin Run command as a login shell. Ayrıca kaldırmanız ~/.bash_profileveya kaynak yapmanız gerekir ~/.profile.
Mikel

@fschmitt Ayrıca Zsh'nizin $HOME/.profileiçinden de kaynak yapabilirsiniz .zshrc. Tüm portatif kabuklarımı yerleştirme eğilimindeyim .profileve sonra onu zıplayabileceğim herhangi bir ortamda paylaşabilirim.
Benjamin R,

56

~/.profileortam değişkeni tanımları ve giriş yaparken (örneğin ssh-agent, screen -m) çalıştırmak istediğiniz grafiksel olmayan programlar için doğru yerdir . Bourne tarzı bir kabuksa (sh, ksh, bash), giriş kabuğunuz tarafından yürütülür. Zsh ~/.zprofileyerine çalışır ve Csh ve tcsh çalışır ~/.login.

Bir X ekran yöneticisi (xdm, gdm, kdm, ...) altında giriş yaparsanız ~/.profile, çalıştırmanın yapılıp yapılmaması, ekran yöneticinizin ve belki de masaüstü ortamınızın dağıtımınız tarafından nasıl yapılandırıldığına bağlıdır. Bir "özel oturum" altında giriş yaparsanız, genellikle yürütür ~/.xsession.

~/.bashrctakma adlar, işlevler, kabuk seçenekleri ve komut istemleri gibi bas-özgü ayarlar için doğru yerdir. Adından da anlaşılacağı gibi, bash için özeldir; csh var ~/.cshrc, ksh var ~/.kshrcve zsh <drumroll> 'a sahiptir ~/.zshrc.

Ayrıca bakınız:
.bashrc ve .bash_profile arasındaki fark
Ortam değişkenlerini bash ile ayarlamak için hangi kurulum dosyaları kullanılmalıdır?
Zsh ~ / .profile isabet değil


Unutma zsh da vardır .zloginek olarak .zprofileçalıştığı sonra .zshrc (ama sadece giriş kabukları için).
ZSH

21

Ortak bir dosya yok, ancak her kabuğu ortak bir dosyadan okumasını sağlayabilirsiniz.

  1. bashokur .bash_profileveya.bashrc
  2. zshve okur.zprofile .zshrc
  3. kshokur .profileveya$ENV

İşte burada ne yapıyorum:

~/.env

# Put environment variables here, e.g.
PATH=$PATH:$HOME/bin

~/.shrc

test -f "$HOME/.env" && . "$HOME/.env"

# Put interactive shell setup here, e.g.
alias ll='ls -l'
PS1='$PWD$ '
set -o emacs

~/.bashrc

test -f ~/.shrc && source ~/.shrc

# Put any bash-specific settings here, e.g.
HISTFILE=~/.bash_history
shopt -s extglob
IGNOREEOF=yes

~/.zshenv

# Put any zsh-specific settings for non-interactive and interactive sessions, e.g.
setopt braceexpand
setopt promptsubst
setopt shwordsplit

~/.zshrc

test -f ~/.shrc && source ~/.shrc

# Put any zsh-specific interactive settings here, e.g.
HISTFILE=~/.zsh_history
setopt ignoreeof

~/.profile

# Interactive sub-shells source .env, unless this is bash or zsh,
# because they already sourced .env in .bashrc or .zshrc.
if test -z "$BASH_VERSION" -a -z "$ZSH_VERSION" || test -n "$BASH_VERSION" -a \( "${BASH##*/}" = "sh" \)
then
    test -f "$HOME"/.env && . "$HOME"/.env
fi

# The name is confusing, but $ENV is ksh's config file for interactive sessions,
# so it's equivalent to .bashrc or .zshrc.
# Putting this here makes running an interactive ksh from any login shell work.
test -f "$HOME"/.shrc && export ENV="$HOME"/.shrc

# Put any login shell specific commands here, e.g.
ssh-add
stty -ixon

~/.bash_profile

source ~/.bashrc
source ~/.profile

~/.zlogin

# zsh sources .zshrc automatically, only need to source .profile
source ~/.profile

~/.zprofile

(empty)

Sisteme kök erişiminiz varsa, başka bir yol ayarlamaktır pam_env.

Koyabilirsin

session optional pam_env.so user_envfile=.env

İlgili /etc/pam.ddosyada (örneğin /etc/pam.d/common-sessionDebian'da) ve kullanıcı giriş yaptığında, PAMortam değişkenlerini from 'dan okuyacaktır ~/.env.

pam_envTemel olarak sadece VAR=valuegirişleri desteklediğini unutmayın .

Daha fazla bilgi:


14

Farklı kabukları için bir ortam config dosyası gibi bir şey yoktur, çünkü onların kabukları nasıl tanımlandıklarına özeldir.

Csh'de setenvbash kullanıyorsunuz export, onları tanımlamak için kullanıyorsunuz.

Her neyse, kendi config dosyanızı sourceyazıp, mermilerinizin dotfilesine ekleyebilirsiniz.

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.