web-dev-qa-db-ja.com

グローバルbash_profile

/etc/profileおよび/etc/bashrcグローバル環境変数を設定するためのファイルで、おそらくその目的を誤解しているだけかもしれませんが...

グローバルbash_profileファイル?

Mac OS Xを使用しています

24
user23312

bash_profileとは呼ばれませんが、グローバルbash構成の標準的な場所は/etc/bash.bashrcです。シェルがbashの場合、これを/etc/profileから呼び出すのが一般的です。たとえば、私の/etc/profileでは、

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

使用に関しては、/etc/profileは、すべてのBourne互換シェル(sh、bash、kshなど)にシステム全体の構成を提供します。通常、同等の/etc/bash_profileは必要ありません。プロファイルファイルの目的は、ログインシェルの動作を制御することです。通常、そこでやりたいことは、bash固有のものではありません。 /etc/bash.bashrcはbash固有であり、ログインシェルと非ログインシェルの両方で実行されます。

さらに複雑なことに、OS Xには/etc/bash.bashrcさえないようです。これはおそらくOS Xのターミナル デフォルトではログインシェルとして実行される であるため、区別が失われます。

ターミナルウィンドウガイドラインの例外は、Mac OS XのTerminal.appです。これは、新しいターミナルウィンドウごとにデフォルトでログインシェルを実行し、.bashrcではなく.bash_profileを呼び出します。他のGUI端末エミュレータでも同じことができるかもしれませんが、ほとんどの場合そうではありません。

私はOS Xを実行していないので、私の知識の範囲はそこで終わります。

18
ire_and_curses

/etc/profileはグローバルですbash_profile。 bashに固有のファイルはありません。bashは、すべてのBourneスタイルのシェルが読み取った標準ファイルを読み取るだけです。ここで、システム全体の環境変数を設定できます。

Bashの一般的な起動ファイルの一般的な概要については、 「すべてのシェルによって読み取られる「.bashrc」に相当するファイルはありますか? 」を参照してください。

インタラクティブシェル(Bash)をグローバルにセットアップする

これは/etc/profileをロードしないため、/etc/profile.d/の何もロードされません(ログインシェルとは異なり、最後を参照してください)。

このためのグローバルファイルは/ etc/bashrcまたは/etc/bash.bashrcです(コンパイル時に設定された-DSYS_BASHRC=フラグによって異なります)。

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

通常は、このファイルを(可能な限り)そのままにして、競合を回避することをお勧めします。私が使用する方法は、ログイン(/ etc/profile)シェルが使用する方法と似ています。

私の戦略は、上記のファイルにローダーを追加することです。

# 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

これで、新しい.shfilesを/etc/bashrc.dディレクトリに配置することで、グローバルなインタラクティブ(bash)シェルファイルにn個のカスタマイズを簡単に追加できます。

Grepをグローバルに色付け

/etc/bashrc.d/grep.sh

alias grep='grep --color=auto'

次のワンライナーでこれを行うことができます:

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

Profile.dとbashrc.dを比較する

これを読んでも確信が持てない場合は、これを実行して自分を納得させてください。

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

新しいターミナルエミュレーターを開き、grepを使用して「the」のようなユーザーディレクトリで一般的なWordを検索します。

grep -r 'the'

何も着色してはいけません。 CTRLALTF1を実行して、仮想コンソールで同じことを行います(XサーバーはおそらくCTRLALTF7で実行されているため、元に戻すことができます。忘れた場合は、たとえばデスクトップマネージャーを再起動してください)

grep -r 'the' 

必要に応じて色付きの結果が得られます。

何も着色してはいけません。仮想コンソールで同じことを行うには CTRLALTF1 (Xサーバーはおそらく CTRLALTF7 元に戻すことができます。忘れた場合は、たとえばデスクトップマネージャーを再起動してください)

grep -r 'the' 

必要に応じて色付きの結果が得られます。

ログインシェルは、マシンを起動したり、仮想コンソールを切り替えたりすると得られるものです CTRLALTF1 使って FNth 仮想コンソール。

ログインシェルは/etc/profileファイルを読み込み、/etc/profile.d/*.shファイルを読み込みます。

0
Jonathan Komar