とりあえずこないだそれなりに首をひねった事象について・・・
知らない間にコンソール画面のプロンプトが、
-bash-4.1#になった という現象に出くわす。
■ 原因
不明。再現不可。
■ 対処
環境変数(PS1)を再定義。
* 下記にBASHの設定ファイル読込のシーケンスにも書きましたが、.bashrcに書いても動きますが、
厳密にはexportする変数は.bash_profileで管理する事をお勧めします。
# ~/.bash_profileにexport PS1="[\u@\h \W]\$"を追記 # echo "export PS1='[\[\e[1;34m\]\u\[\e[00m\]@\[\e[0;32m\]\h\[\e[00m\]:\[\e[1;34m\]\w\[\e[00m\]]$ '" >> $HOME/.bash_profile # .bash_profileをリロード source $HOME/.bash_profile # 確認 $ set | grep -i ps1 PS1='[\[\e[1;34m\]\u\[\e[00m\]@\[\e[0;32m\]\h\[\e[00m\]:\[\e[1;34m\]\w\[\e[00m\]]$ ' ok!
ちなみに、
「/etc/profile」に設定すると基本的にbashを使う全ユーザに反映されます。
「~/.bashrc」「~/.bash_profile」に設定するとbashを使う各ユーザ環境毎に設定ができます。
動きまとめると・・・
1. /etc/profile
全ユーザーに適用されるデフォルトの設定ファイル。 ユーザー単位では編集しない。
2. ~/.bash_profile
存在していれば読込まれる設定ファイル。 ユーザー単位での設定を書く。 無くても良い。
3. ~/.bash_login
ログインして~/.bash_profileが存在しない場合にのみ、存在していれば読込まれる設定ファイル。 無くても良い。
4. ~/.profile
ログインして~/.bash_profile ・ ~/.bash_loginが存在しない場合にのみ、存在していれば読み込まれる設定ファイル。 無くても良い。
5. ~/.bashrc
シェル(bash)ログインで毎回読込まれる設定ファイル。 無くても良い。
~/.bash_logout
シェル(bash)ログアウトに毎回読込まれる設定ファイル。 無くても良い。
どう使い分ければいいか。
~/.bash_profile
ログイン時にのみ実行される。
具体的な用途
環境変数を設定する (export する変数)
環境変数はプロセス間で勝手に受け継がれるのでログイン時のみ設定すれば十分です。
~/.bashrc
bashを起動するたびに設定する必要のあるもの
具体的な用途
環境変数でない変数を設定する (export しない変数)
エイリアスを定義する
シェル関数を定義する
コマンドライン補完の設定をする
これらは bash を起動する度に毎回設定する必要があるもの。
ユーザーがログインすると、まず/etc/profileを読み込み、次に~/.bash_profileを読み込みます。
→ ~/.bash_profileが存在しない場合は、~/.bash_loginを読み込みます。
→ ~/.bash_loginもない場合は~/.profileを読み込みます。
→ ~/.bash_logoutは、ログアウト時に読み込まれるファイルです。
*.bashrcは、プロセスとしてbashを起動したときに読み込まれます。
あと念のためですが、
下記、分岐処理は記述しておかないと、
.bashrc に書いた設定が反映されないけど .bash_profile に書くといける。
ということになります。
.bash_profile から .bashrc を読み込む必要がある場合は、確認しましょう。
# .bash_profile の最後に
test -r ~/.bashrc && . ~/.bashrc
チョット話がずれてしまったっぽいですが、
プロンプト変数をbash起動時に反映させるための仕組みとして、繋がっているので、記載しております。
それでは、
プロンプトので整形してみましょう。
■ プロンプトカスタマイズ
まずは、基本形。
# 環境変数PS1をエクスポート echo "export PS1='[\u@\h:\w]\$ ' " >> $HOME/.bash_profile # .bash_profileをリロード source $HOME/.bash_profile
こんな感じにプロンプト表示となります。
[ec2-user@aws-web01:~]$
PS1に設定した「\u」とか「\h」のパラメータが値を引っ張ってきます。
他にも設定できる内容は、こんな感じ。好きなシェルを表示させよう。
■ 設定できる変数一覧
記号 解釈 \a ベル(ビープ音)をならします(ASCII のベル文字 07) \d "曜日 月 日"の形式の日付 \h ホスト名(最初の . までの名前) \H ホスト名 \n 改行 \r 復帰 \s シェル名(標準だと -bash が表示) \t 時刻 HH:MM:SS 形式(24時間) H = Hour = 時、M = Minutes = 分、S = Seconds = 秒 \T 時刻 HH:MM:SS 形式(12時間) \@ 時刻 am/pm をつけたもの。Lang=Jaの場合 HH:MM (午前|午後)となる。 \u 現在のユーザー名 \v bash のバージョン \V bash のバージョン・リリース番号など詳細 \w 現在のディレクトリ(フルパス) \W 現在のディレクトリ名 \! コマンドのヒストリー番号 \# コマンドのコマンド番号(ログイン後何回実行したか) \$ UID が 0 、つまりrootであれば『 # 』、それ以外は『 $ 』 \\ バックスラッシュ \[ 表示されない文字列(エスケープシーケンス/端末制御シーケンス)を埋め込む \] 表示されない文字列の終わり
■ 外部コマンドを呼び出してみる
dateコマンドを挿入
export PS1="[\$(date)][\u@\h:\w]\$ "
と、こんな感じのシェル表示になります。
[2015年 4月 2日 木曜日 15:13:45 JST][ec2-user@aws-web01:~]$
外部コマンドを挿入するときは、
「\$(コマンド)」ってな感じで挿入すると出てきます。
ちょっとはまったのは、シングルクォートだとうまく動かなかった。
export PS1='[\$(date)][\u@\h:\w]\$ ‘
↓
表示:[#(date)][ec2-user@aws-web01:~]#
なんでかな?まぁ、ダブルクォートではさむようにしましょう。
export PS1="[\$(date +)][\u@\h:\w]\$ "
■ 色をつけてみよう。
export PS1="\[\e[1;36m\][\u@\h:\w]\$\[\e[00m\] "
ちょっとややこしいけど、大まかには数字の部分は色を意味していて、
それ以外はちょこっとした設定関連。
■ そんなちょこっとした設定一覧
記号 解釈 \[ シーケンスの開始 \e[1;32 これ以降を緑色にする。\033[1;32mでもOK \e[00m エスケープシーケンス(緑色)をこれ以降で無効にする。\033[00mでもOK \] シーケンスの終り あとは「1;32」の所を変更して、色を変えてみよう。 色 コード;値 黒色(Black) 0;30 青色(Blue) 0;34 緑色(Green) 0;32 水色(Cyan) 0;36 赤色(Red) 0;31 紫色(Purple) 0;35 明灰色(Light Gray) 0;37 暗灰色(Dark Gray) 1;30 Light Blue 1;34 Light Green 1;32 Light Cyan 1;36 Light Red 1;31 Light Purple 1;35 黄色(Yellow) 1;33 白色(White) 1;37 すべての属性を無効 00 ※コードを省略した時は「0」の扱い
以上です。
同じ事象で困って、行き着きました。ありがとうございますー
swift様
とりいそぎの問題解決されてみたいでよかったです。
事象発生の根本原因も判明しだい記事にしたいと思います。
今後ともお役にたてる記事を発信できるよう日々インシデントと楽しく向き合ってまいります。
[設定]ボタン>[プロファイル]タブ>[編集(E)]ボタン>[コマンド]タブ>
[ログインシェルとしてコマンドを実行する(R)]にチェックをしても
bash-4.2$とかを対処できるみたいです。
CentOS Linux release 7.3.1611 (Core)にて確認。
情報ありがとうございます。
プロンプト化けの際、検証させていただきます。