私はクロスコンパイルされたLinux From Scratch-Embedded .In [3.3。環境の設定]で、PS1は.bash_profile
ファイルで宣言されています。実際には、ターミナルでは表示されません。
su - clfs
としてログインすると、.bash_profile
ファイルと.bashrc
ファイルの両方が実行されます。su clfs
としてログインすると、.bashrc
ファイルのみが実行されます。
どちらの場合も、ターミナルでPS1が更新されることはありません。
PS1を.bashrc
ファイルに配置すると、更新されます。
CLFSの本は.bash_profile
ファイルに次のように記述しています:
cat > ~/.bash_profile << "EOF"
exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash
EOF
それでは、PS1の適切な場所はどこですか?
PS1
シェル変数は、初期化ファイルであるため、bash
シェルの~/.bashrc
に設定する必要があります対話型のシェルセッションで読み込まれます。
この変数はShell変数であり、環境変数ではないことに注意してください(子プロセスにその値を継承させることは意味がなく、現在のそれを使用するシェル)。したがって、export
でエクスポートする必要はありません。
関連:
シェルの起動ファイルからbash
を起動する必要はありません。 ~/.profile
(またはログインシェルに関連する対応するファイル)から特定のシェルを起動することは、実行中のシステムがログインシェルの変更を許可していない場合に保証される可能性があります。シェルが既にファイルを実行している場合は、他のシェルをしないように注意してください。そうしないと、ソートの無限ループが発生する可能性があります。 。
~/.bash_profile
に追加するexec
コードは必要ありません。 ~/.bashrc
を解析する方法だと思います(インタラクティブなシェルを起動し、インタラクティブなbash
シェルが~/.bashrc
を読み取ります)。これを行うためのより良い方法は、たとえば~/.bash_profile
でこれを使用するなど、ファイルの1つに他のファイルをソースさせることです。
if [[ -f $HOME/.bashrc ]]; then
source "$HOME/.bashrc"
fi
次に、PS1
を~/.bashrc
に設定します(HOME
またはTERM
をタッチする必要はありません)。
コマンドが行うもう1つのことは、env -i
を使用して他のすべての環境変数を一掃することです。これを行う非常に具体的な理由がない限り、通常のシェル起動ファイルからそれを行うべきではありません。
Bashのマンページから引用するには:
When bash is invoked as an interactive login Shell, or as a non-interactive
Shell with the --login option, it first reads and executes commands from the
file /etc/profile, if that file exists. After reading that file, it looks
for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads
and executes commands from the first one that exists and is readable. The
--noprofile option may be used when the Shell is started to inhibit this
behavior.
When a login Shell exits, bash reads and executes commands from the file
~/.bash_logout, if it exists.
When an interactive Shell that is not a login Shell is started, bash reads
and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files
exist. This may be inhibited by using the --norc option. The --rcfile file
option will force bash to read and execute commands from file instead of
/etc/bash.bashrc and ~/.bashrc.
したがって、シェルの起動方法に大きく依存します。
PS1
すべてのシェルでアクティブloginシェル(例:su - <user>
またはssh
)を介してリモートでログインする場合、それをprofileに入れます。PS1
すべてのシェルでアクティブnon-loginシェル(たとえば、単にデスクトップ環境で別の端末を開く)、bashrcに入れます。PS1
は.bashrc
に含める必要があります。 .profile
でも設定できます。
Debianはそこから.bashrcを入手します:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi