私は走った
git clone https://git.savannah.gnu.org/git/bash.git
cd bash/
./configure
make
./bash
新しく起動した Bash インスタンスは、親シェル、特にシェルプロンプトを定義する PS1 変数から環境を継承していないことがわかりました。継承が適用されます/bin/bash
ソースファイル一覧/bin/bash
と同じ./bash
./bash -lixc exit 2>&1 | sed -n 's/^+* \(source\|\.\) //p'
/bin/bash -lixc exit 2>&1 | sed -n 's/^+* \(source\|\.\) //p'
編集:aviroが述べたように、PS1はエクスポートせずに定義されているので、エクスポートしようとすると継承されたため、元の質問が間違っていました。私のコンピュータでは、PS1は2つのファイルで定義されています。
/etc/bash/bashrc
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
[[ $DISPLAY ]] && shopt -s checkwinsize
PS1='[\u@\h \W]\$ '
そして/etc/bash/bashrc.d/artix.bashrc
if ${use_color} ; then
if [[ ${EUID} == 0 ]] ; then
PS1='\[\033[01;31m\][\h\[\033[01;36m\] \W\[\033[01;31m\]]\$\[\033[00m\] '
else
PS1='\[\033[01;36m\][\u@\h\[\033[01;37m\] \W\[\033[01;36m\]]\$\[\033[00m\] '
fi
else
if [[ ${EUID} == 0 ]] ; then
# show root@ when we don't have colors
PS1='\u@\h \W \$ '
else
PS1='\u@\h \w \$ '
fi
fi
./bash
PS1を実行するときの\s-\v\$
理由がわかりません。
すべてのソースファイルを一覧表示するコマンドは、runを使用するときに両方のファイルがsource filesである必要があります./bash
が、何らかの理由でそうでないか、シェルが別のタイプ/モードで起動されたことを示しています。なぜ?
ベストアンサー1
PS1
まず、これが一般的であることを理解する必要があります。シェル変数、これは子供に継承されないことを意味します。したがって、環境変数を明示的に実行しexport PS1=...
て生成しない限り、各新しいプロセスは親プロセスのPS1
代わりにrcファイルからbash
(および他のシェル変数)を取得します。したがって、まずPS1
正確な定義がPS1
どこにあるかを調べる必要があります。
次の方法でエクスポートできますPS1
。
export PS1
その後、実行すると、この場合は新しいシェルが継承される./bash
ことがわかります。PS1
それでは、コンパイルがbash
rcファイルから期待するシェル変数を取得できないのはなぜですか?PS1
私の推測は次のとおりです。多くのシステムではPS1
そうです/etc/bash.bashrc
。ただし、すべてのbash
バージョンでこのファイルを読み取ることはできません。bash
コンパイル方法によって異なります。良い経験則は、bash
マニュアルページを確認することです。例えば、Ubuntuあなたが見ることができるもの:
ログインシェルではなく対話型シェルを起動すると、bashは次のコマンドを読み取り、実行します。
/etc/bash.bashrc
そして、~/.bashrc
これらのファイルが存在する場合。--norc
このオプションを使用すると、これを抑制できます。 fileオプションは、bashにファイルの代わりに--rcfile
コマンドを読み込んで実行するようにします。/etc/bash.bashrc
~/.bashrc
しかし、/etc/bash.bashrc
本文には言及すらされません。bash
マニュアルページ[git]からダウンロードしたもの:
ログインシェルではなくインタラクティブシェルを起動すると、bashは
~/.bashrc
ファイルが存在する場合にコマンドを読み取り、実行します。--norc
このオプションを使用すると、これを抑制できます。 file--rcfile
オプションはbashが~/.bashrc
。
また、README
Debianのドキュメントには次のものがありますbash
。
5. は何ですか
/etc/bash.bashrc
。記録がないようです。Debian バージョンの bash は、読み取り優先エラーを発生させる特別なオプション ( ) を使用して
-DSYS_BASHRC
コンパイルされます。bash
/etc/bash.bashrc
~/.bashrc
そのため、git
使用中のリポジトリで見ることができます
config-top.h
定義行はSYS_BASHRC
デフォルトでコメントアウトされます。
/* System-wide .bashrc file for interactive shells. */
/* #define SYS_BASHRC "/etc/bash.bashrc" */
したがって、デフォルトのビルドは起動時にそれを読み取らbash
ず、そこで定義してもインポートされません。/etc/bash.bashrc
PS1
この行のコメントを削除する場合:
#define SYS_BASHRC "/etc/bash.bashrc"
もう一度実行すると、新しいコンテンツに予想される変数が表示されますmake
。bash
PS1