グローバルbash_profile


20

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

グローバルbash_profileファイルはありますか?

Mac OS Xを使用しています

回答:


15

呼び出されませんbash_profileが、グローバルbash構成の標準的な場所は/etc/bash.bashrcです。/etc/profileシェルがbashの場合、これを呼び出すのが通常です。たとえば、私/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.bashrcbash固有であり、ログインシェルと非ログインシェルの両方で実行されます。

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

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

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


/etc/bash.bashrc非対話型シェルから読み取らないでください。/etc/profile非対話型シェルで読み取ることができます。ログインシェルと非ログインシェルの違いを
ジル「SO-悪であるのをやめる」

@Gilles-あなたがここで何をしようとしているのか明確ではありません。非対話型のログインシェルは確かに珍しいものです。参考までに、引用するコードは自分で作成したものではありません。/etc/profileUbuntu 12.04 のデフォルトからです。/etc/profilebashの下でのみ実行され、他のsh互換シェルではないものが必要な場合は、代わりに何を提案しますか?
ire_and_curses

/etc/profile私のシステムのシステムファイルには、上部に次のコメントが含まれています# System-wide .profile for sh(1)。これprofilesh特定の意味ですか?sh何とか前に実行bash

@Josh Voigts-はのshサブセットですbash/etc/profile以下のために実行されshbashおよび他のすべてのBourne互換シェル。
ire_and_curses

@ire_and_cursesファイルは/etc/bashrcMacではなく、Macで呼び出されるよう/etc/bash.bashrcです。また/bin/sh、同様に実行されるようです。
BrainStorm.exe

4

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

すべてのシェルが読み取る「.bashrc」に相当するファイルはありますか?を参照してくださいbashの一般的なスタートアップファイルの一般的な概要については。


0

インタラクティブシェル(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」などのユーザーディレクトリ内の一般的な単語を検索します。

grep -r 'the'

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

grep -r 'the' 

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

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

grep -r 'the' 

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

ログインシェルは、仮想コンソールをCTRLALTF1介してマシンを起動したり、仮想コンソールを切り替えたりするときに取得するものですFNth

ログインシェルは/etc/profile/etc/profile.d/*.shファイルのロード中にロードされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.