シェルプロンプト(PS1)ジェネレーター
bash・zsh のプロンプトを組み立てて一式でコピー
使いたいパーツ(ユーザー名、ホスト、カレントディレクトリ、git ブランチ、直前コマンドの終了コード、Python 仮想環境)をオンにして色を選ぶと、その場でプロンプトが描画されます。出てくるのは ~/.bashrc や ~/.zshrc にそのまま貼り付けられる一式です。色コードは非表示区間として印を付けてあるので長いコマンド行が誤った位置で折り返さず、git ブランチはリポジトリの外では消え、終了コードはプロンプトに上書きされる前に捕まえます。すべてブラウザ内で動き、ログインも不要です。
プリセット
プレビュー
dev@mbp:~/code/bootsignal (main) $ npm run dev
パーツ
スタイル
プロンプト記号
完成したプロンプト
# BootSignal prompt, add this to ~/.bashrc
bs_git_branch() {
local b=$(git branch --show-current 2>/dev/null)
[ -n "$b" ] && printf ' (%s)' "$b"
}
PS1='\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\[\e[1;35m\]$(bs_git_branch)\[\e[0m\] \[\e[1m\]\$\[\e[0m\] 'すべてブラウザ内で組み立て、何もアップロードしません。まずシェルに貼り付けて試し、気に入ったら設定ファイルに追加してください。
よくある質問
- どこに書けばいいですか?
- bash なら ~/.bashrc、zsh なら ~/.zshrc の末尾に追記し、source ~/.bashrc を実行するか新しいターミナルを開きます。macOS の bash は ~/.bash_profile を読むことが多いです。
- 色コードを \[ \] で囲むのはなぜですか?
- bash はカーソル位置を決めるとき PS1 の文字をすべて数えます。色コードは画面に何も表示しないため、非表示区間として印を付ける必要があります。付けないと長いコマンド行が誤った位置で折り返し、プロンプトを上書きします。zsh は %F・%f を使い、最初から幅 0 として扱います。
- git ブランチが関数なのはなぜですか?
- PS1 だけでは条件分岐ができないため、リポジトリの外では何も出力しないヘルパーにしています。こうすると空の括弧や余分な区切りが残りません。ブランチの隣に区切りを置かないのも同じ理由です。
- 終了コードに PROMPT_COMMAND が要るのはなぜですか?
- bash ではプロンプト内のコマンド置換が先に走るため、そのまま $? を読むと置換の結果が見えてしまいます。PROMPT_COMMAND で一度捕まえておけば本当の終了コードが残ります。zsh は %(?..) の条件エスケープがあるのでフックは不要です。