it-swarm-id.com

Apakah ada file setara ".bashrc" yang dibaca oleh semua shell?

Adalah ~/.bashrc satu-satunya tempat untuk menentukan variabel lingkungan spesifik pengguna, alias, modifikasi pada variabel PATH, dll?

Saya bertanya karena sepertinya ~/.bashrc tampaknya hanya bash - tetapi cangkang lain juga ada ...

115
Stefan

Berkas $HOME/.profile digunakan oleh sejumlah shell, termasuk bash, sh, dash, dan mungkin yang lain.

Dari halaman bash man:

Ketika bash dipanggil sebagai shell login interaktif, ... pertama kali membaca dan mengeksekusi perintah dari file/etc/profile, jika file itu ada. Setelah membaca file itu, ia mencari ~/.bash_profile, ~/.bash_login, dan ~/.profile, dalam urutan itu, dan membaca serta mengeksekusi perintah dari yang pertama yang ada dan dapat dibaca.

csh dan tcsh secara eksplisit tidak melihat ~/.profile tapi cangkang itu agak kuno.

97
msw

~/.profile adalah tempat yang tepat untuk definisi variabel lingkungan dan untuk program non-grafis yang ingin Anda jalankan ketika Anda masuk (mis. ssh-agent, screen -m). Ini dijalankan oleh Shell login Anda jika itu adalah Shell Bourne-style (sh, ksh, bash). Zsh dijalankan ~/.zprofile sebagai gantinya, dan Csh dan tcsh menjalankan ~/.login.

Jika Anda masuk di bawah manajer tampilan X (xdm, gdm, kdm, ...), apakah ~/.profile dijalankan tergantung bagaimana manajer tampilan Anda dan mungkin lingkungan desktop dikonfigurasikan oleh distribusi Anda. Jika Anda masuk di bawah "sesi khusus", itu biasanya dijalankan ~/.xsession.

~/.bashrc adalah tempat yang tepat untuk pengaturan spesifik bash, seperti alias, fungsi, opsi dan konfirmasi Shell. Seperti namanya, itu khusus untuk bash; csh memiliki ~/.cshrc, ksh memiliki ~/.kshrc, dan zsh memiliki <drumroll> ~/.zshrc.

Lihat juga:

Tidak ada file umum, tetapi Anda dapat membuat setiap Shell membaca dari file umum.

  1. bash dibaca dari .bash_profile atau .bashrc
  2. zsh dibaca dari .zprofile dan.zshrc
  3. ksh dibaca dari .profile atau $ENV

Jadi inilah yang saya lakukan:

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

Jika Anda memiliki akses root ke sistem, cara lain adalah dengan mengatur pam_env.

Anda bisa meletakkannya

session optional pam_env.so user_envfile=.env

dalam file /etc/pam.d yang relevan (mis. /etc/pam.d/common-session di Debian), lalu ketika pengguna masuk, PAM akan membaca variabel lingkungan dari ~/.env.

Perhatikan bahwa pam_env Pada dasarnya hanya mendukung entri VAR=value.

Info lebih lanjut:

23
Mikel

Tidak ada yang namanya file konfigurasi lingkungan untuk shell yang berbeda, karena itu bahkan Shell yang spesifik bagaimana mereka didefinisikan.

Di csh Anda menggunakan setenv di bash Anda menggunakan export untuk mendefinisikannya.

Pokoknya Anda bisa menulis file konfigurasi Anda sendiri dan memasukkannya dengan source dalam dotfiles dari shell Anda.

15
echox