地域の慣習により、人々は bashrc から bash_profile をソースとして使用します。 .
すべての意見 02
でスタートアップ ファイルを構成する方法について読んだことがあります。 主に地域の慣習に基づいています。地域の慣習では通常、ログインや非対話型のケースについてはあまり言及されていないという点で、全体像については言及されていません。面白いことに、私も調べましたが、15
について言及している人はめったにいません。 ある起動ファイルと別の起動ファイルに変数を入れる理由についての彼らのすべての話の中で。実際、次のようなコメントは聞いたことがありません。「/bin/sh には理由があります。Bash は、元の Bourne シェルである /bin/sh をそのまま呼び出すと、それをエミュレートします。 " 1 つには、少し脱線しますが、このケースは、シェルをインタラクティブに使用するだけでなく、非インタラクティブで非ログイン (無人) を提供する人々にとって重要です。 または背景 ) 27
最小限のシェル処理を必要とするスクリプト。つまり、バックグラウンド処理では、色付きのプロンプト、コマンド履歴と置換、適切に定義された $TERM 変数などの優れた機能は必要ありません。
さらに 33
に関して 、私がよく目にするのは、最小限の検索パスを作成したり、完全に修飾されたプログラムを呼び出したりして、端末に接続されていない出力(つまり、非対話型、非ログインの 43
または 51
ケース) 68
で作業する場合 スクリプト。これは通常、シェルの起動シーケンスが十分に理解されていないことが原因であり、ローカルの 73
詳細に説明すると、ローカル慣習によって行われるセットアップは、その特定のインストールとシェルの 88
でレイアウトされます ファイル。 UNIX インストールの 90
を調べると、 典型的な 103
の一部として呼び出されるファイル 119
で確立された規則を補完する方法で、独自のスタートアップを作成する必要があります。
Linux ドキュメンテーション プロジェクトには次のように記載されています。
<ブロック引用>/etc/skel/ 各新規ユーザーのデフォルト ファイルは、このディレクトリに保存されます。新しいユーザーが追加されるたびに、これらのスケルトン ファイルがホーム ディレクトリにコピーされます。平均的なシステムには、.alias、.bash_profile、.bashrc、および .cshrc ファイルがあります。他のファイルはシステム管理者に任されています。
123
でも マニュアルには、130
で一般的に見られるこれらのファイルについては言及されていません。 私が思い出す限り、SunOS、Solaris、RedHat、Ubuntu、HP-UX、umips、および Ultrix には 141
があります。 ユーザーのシェル起動ファイルをパターン化するためのファイル。 OSXは明らかにそうではありません-私は現在OSX 10.9.1を使用しています。残念ながら、OSX は、慣例の観点から物事をどのようにセットアップするかという点で多くのことを教えてくれませんが、OSX は BSD の派生物であるため、別の BSD 派生物を使用し、独自の 156をパターン化しました。コード> その後の起動シーケンスを、OSX 10.9.1
163
で使用されているローカルの規則に合わせて調整します
並行したコメントで言及された重要な点は、OSX の場合、すべての新しいターミナルをインタラクティブなログイン シェルとして起動するという慣習があるということです。これは実際、OSX のデフォルトです。インストールのユーザーが一貫している限り、この規則に問題はありません。 OSX 上のターミナルのデフォルトの動作は、ターミナルの設定に次の変更を加えることで、他の UNIX ディストリビューションのシェル起動規則に準拠するように変更できます 、特に、設定を変更します 173
182
を発行する コマンド:
以上の背景や紹介を踏まえて、私の最高のアドバイスに移ります。 、それだけの価値があります。
ベスト アドバイス:
UNIX ディストリビューションの管理者が配置したファイルを調べます。存在する場合は、次の場所から始めます。 195
を使用することを忘れないでください 一部のファイルはドットで始まるためです。これらのファイルが起動時にどのように使用されるかを確認し、独自の起動ファイルがそれらとどのように相互作用するかを確認してください:
/etc/bashrc
/etc/profile
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/bash.bashrc
/etc/bash_completion
205
を見てください 呼び出しと起動シーケンスのマニュアル。すべてがうまくレイアウトされています。
警告として、これが私のOSX 10.9.1インストールでのやり方です - 他のUNIXディストリビューションは異なりますが、以下に示すものは、すべてではないにしてもほとんどのUNIXディストリビューションで動作するはずですが、それらの他のUNIXディストリビューションを使用してください。独自の目的に合わせて以下を調整するためのガイドとしての規則:
.profile
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists. Note, however, that we will have a ~/.bash_profile and it
# will simply source this file as a matter of course.
# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.
# From here on out, I basically set up my PATH, LD_LIBRARY_PATH, and anything else I'd like
# global to running programs and how those programs find their libraries. This is shared by
# `cron`, so we really don't want interactive stuff, here. Also, I setup my environments
# for brew, macports, and fink here, essentially with setting PATH, and invocation of those
# package initialization file as in:
# Brew and locally compiled stuff:
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/sbin:$PATH
# The following line puts gnu utilities without the prefix "g" in the path
# i.e. tar/gtar:
export PATH=$PATH:/usr/local/Cellar/coreutils/8.21/libexec/gnubin
# MacPorts shoves stuff in /opt, so to get at that stuff...
export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH
# Set up for using Fink, which lives in /sw:
[ -e /sw/bin/init.sh ] && . /sw/bin/init.sh
# My stuff:
export PATH=~/perl:$PATH
export PATH=~/bin:$PATH
export PATH=.:$PATH
.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# From here on out, I put in things that are meaningful to interactive shells, like aliases,
# `shopt` invocations, HISTORY control, terminal characteristics, PROMPT, etc.
.bash_profile
# ~/.bash_profile: executed by the command interpreter for login shells.
# Because of this file's existence, neither ~/.bash_login nor ~/.profile
# will be sourced.
# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.
# Because ~/.profile isn't invoked if this files exists,
# we must source ~/.profile to get its settings:
if [ -r ~/.profile ]; then . ~/.profile; fi
# The following sources ~/.bashrc in the interactive login case,
# because .bashrc isn't sourced for interactive login shells:
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
# I'm still trying to wrap my head about what to put here. A suggestion
# would be to put all the `bash` prompt coloring sequence functions as
# described on http://brettterpstra.com/2009/11/17/my-new-favorite-bash-prompt/
これが私の 2 セントです。私の例では、起動ファイルを介して制御パスを示し、特定のサイトの規則が課す可能性があるものを回避しようとしていることに注意してください.
<ブロック引用>
そもそもなぜすべてを bash_profile に入れるのですか?
.profile はもともと /bin/sh で使用されていましたが、.profile を使用すると下位互換性が確保されます。
Mac を使用していない限り、すべてが bash_profile に入れられるわけではありません。 .bashrcに入れます
<ブロック引用>すべてをbashrcに入れ、bash_profileソースを持っている方が理にかなっており、Linuxコミュニティとの一貫性が保たれるのではないでしょうか?
マシンに接続したときにロードされるシェルにシステム情報を入れるのが一般的です (稼働時間、更新が必要なパッケージ、CPU 温度など)。 bashrc が bash_profile をソースとしている場合、新しいシェルを開くたびにそのすべての情報が表示されます。
Unix の場合:
.bash_profile はログイン シェルによって読み込まれます
.bashrc は対話型シェルによってロードされます
Mac を除いて、すべての新しい端末 (インタラクティブかどうかに関係なく) にログイン シェルをロードします
追加リソース
bashrc と bash-profile の違い
環境変数はどこで指定されていますか
<ブロック引用>
[...] なぜ bash_profile を優先するのが標準なのか混乱していますか?
それが標準だと誰が言った? Bash のマニュアル自体には、この件に関して次のように書かれています。
<ブロック引用>したがって、通常、 ~/.bash_profile には次の行が含まれます
if [ -f ~/.bashrc ];それから 。 ~/.bashrc;フィ
ログイン固有の初期化の後 (または前)。