私はdash(sh)、bash、またはzshを使用しています。可能であれば、公共の場所に置くことをお勧めします。
シェルと対話するときに正しいPS1設定が必要なので、この状況を考慮する必要があります。
- ログイン(PS1表示)
- 数
- Sudo
- スクリプト(PS1は表示されません)
PS1を.bashrcに入れましたが、常に動作するわけではありません。
答え1
各シェルには独自のエスケープシーケンスがあるため、各PS1
シェルに対して個別に設定する必要があります。さらに、PS1
これは対話型シェルにのみ適しており、他のプログラムでは使用されません。したがって、PS1
シェルのインタラクティブな起動ファイルを置きます。
~/.bashrc
バッシュ用~/.kshrc
ケシュの場合~/.zshrc
zshの場合
.bashrc
Bashには珍しい点があります。ログインシェルではロードされず、thisのみロードまたは~/.bash_profile
ロードされません~/.profile
。この問題を解決するには、次の行をに入力してください~/.bash_profile
。
if [ -e ~/.profile ]; then . ~/.profile; fi
case $- in *i*) . ~/.bashrc;; esac
シェル設定ファイルの詳細については、次を参照してください。すべてのシェルが読める「.bashrc」に対応するファイルはありますか?。
答え2
すべてのシェルとユーザーが同じプロンプトを持つようにするには、それを/etc/profile
このファイルに入れます。すべてのシェルのソースであり、PS1が定義されている標準位置です。
答え3
あなたができることの1つは、通常、名前付き変数を使用して独自のソーススクリプトで各シェルの解釈に固有のターミナルエスケープを定義し、それをすべて最後のプロンプトに入れることです。
~/.zshrc
esc1='SPECIFIC TO ZSH'
esc2='SPECIFIC TO ZSH'
. ~/.common_prompt
~/.bashrc
esc1='SPECIFIC TO BASH'
esc2='SPECIFIC TO BASH'
. ~/.common_prompt
~/.dashrc
esc1='SPECIFIC TO DASH'
esc2='SPECIFIC TO DASH'
. ~/.common_prompt
~/.common_prompt
esc3='COMMONLY INTERPRETED ESCAPE SEQUENCE'
PROMPT_COMMAND='eval PS1=\"printf %b "$esc1" "$esc2" "$esc3"\"'
あるシェルが他のシェルよりもプロンプトでより多くの操作を実行できる場合は、ファイルを取得するだけ.dot
では.common_prompt
必ずしも終了しません。したがって、たとえば、次のようなより多くの処理をzsh
実行したい場合dash,
-そうなるから- そこから持って行けばいいです。
~/.zshrc
esc1='SPECIFIC TO ZSH'
esc2='SPECIFIC TO ZSH'
. ~/.common_prompt
_more_processing "${PROMPT_COMMAND}"