web-dev-qa-db-ja.com

すべてのシェルによって読み取られる「.bashrc」に相当するファイルはありますか?

~/.bashrcユーザー固有の環境変数、エイリアス、PATH変数の変更などを指定する唯一の場所?

~/.bashrcbashのみのようですが、他のシェルも存在します…

115
Stefan

ファイル$HOME/.profileは、bash、sh、dash、その他のシェルを含む多くのシェルで使用されます。

Bashのmanページから:

Bashが対話型ログインシェルとして呼び出されると、.../etc/profileファイルが存在する場合、最初にそのファイルからコマンドを読み取って実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で検索し、存在し、読み取り可能な最初のコマンドからコマンドを読み取って実行します。

cshとtcshは~/.profileを明示的に参照しませんが、これらのシェルは時代遅れです。

97
msw

~/.profileは、環境変数の定義や、ログイン時に実行する非グラフィカルプログラム(ssh-agentscreen -mなど)に適した場所です。それがBourneスタイルのシェル(sh、ksh、bash)である場合は、ログインシェルによって実行されます。 Zshは代わりに~/.zprofileを実行し、Cshとtcshは~/.loginを実行します。

Xディスプレイマネージャー(xdm、gdm、kdmなど)でログインする場合、~/.profileを実行するかどうかは、ディストリビューションによってディスプレイマネージャーとデスクトップ環境がどのように構成されているかによって異なります。 「カスタムセッション」でログインすると、通常~/.xsessionが実行されます。

~/.bashrcは、エイリアス、関数、シェルオプション、プロンプトなどのbash固有の設定に適した場所です。名前が示すように、これはbashに固有です。 cshには~/.cshrc、kshには~/.kshrc、zshには<drumroll> ~/.zshrcがあります。

以下も参照してください。

共通ファイルはありませんが、すべてのシェルに共通ファイルから読み取らせることができます。

  1. bash.bash_profileまたは.bashrcから読み取ります
  2. zsh.zprofileから読み取りますおよび.zshrc
  3. ksh.profileまたは$ENVから読み取ります

だからここに私がやっていることがあります:

~/.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)

システムへのrootアクセス権がある場合、もう1つの方法はpam_envをセットアップすることです。

あなたは置くことができます

session optional pam_env.so user_envfile=.env

関連する/etc/pam.dファイル(たとえば、Debianの/etc/pam.d/common-session)で、ユーザーがログインすると、PAM~/.envから環境変数を読み取ります。

pam_envは基本的にVAR=valueエントリのみをサポートすることに注意してください。

より詳しい情報:

23
Mikel

異なるシェル用の環境設定ファイルのようなものはありません。シェルの定義でさえ、シェル固有であるからです。

Cshではsetenvを使用し、bashではexportを使用してそれらを定義します。

とにかく、独自の設定ファイルを作成し、sourceをシェルのドットファイルに含めることができます。

15
echox