twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル Linuxで、bash プロンプトを素敵で実用的なものに変更する

Linuxで、bash プロンプトを素敵で実用的なものに変更する

原文は、こちらです。

 大事な情報をすべて含むような bash 用のプロンプトを作成しましょう。もちろん、同時に見た目も大事です。一日のほぼ全部をコンピューターの前に座って過ごすのですから、プロンプトの見た目も大事です。設定の変更を速やかにテストしたり、即座に変更を取り消したりする方法や、情報の見た目を変更したり、ユーザーごとにカスタマイズしたり、複数行のプロンプトを作成したりする方法を学びます。

 私は SSH セッション用に別プロンプトを用意しているため、異なる端末からコマンドを投入するという過ちを防止できます。もちろんサーバーが壊れていないことが前提です。~/.bashrc に以下を挿入します。

if [ -n "$SSH_CLIENT" ]; then text=" ssh-session"
fi
export PS1='\[\e[1;32m\]\u@\h:\w${text}$\[\e[m\] '

そして、変更をロードします。

$ source ~/.bashrc

SSH セッションを開きます。

 図 1: ボールド緑で表示した SSH セッション

以上の変更は、すべて、SSH 経由でできます。



色の変更

 さまざまな ANSI カラーから色を選択することもできます。ANSI カラー コード表はどこにでもあります。以下は、基本色の表です。

0;30m   Black
0;31m   Red
0;32m   Green
0;33m   Yellow
0;34m   Blue
0;35m   Purple
0;36m   Cyan
0;37m   White
0 は通常のフォントです。0 を 1 にすると bold、4 は下線、5 はゆるく点滅です。SSH の例で、text=" ssh-sesshon" は表示するテキストを意味し、text ラベルは、${text} にマッチするようにしておけば任意のものにできます。

Bash は、さまざまな特殊文字をサポートしているので、 プロンプトの変更に使えます。たとえば、\u はユーザー名、\h はホスト名を意味します。以下に、特殊文字の例を示します。

\d : the date in "Weekday Month Date" format

\d : the date in "Weekday Month Date" format 
\t : the current time in 24-hour HH:MM:SS format
\w : the current working directory
\s : the name of the shell
\n : newline
\[ : begin a sequence of non-printing characters, for embedding a terminal control sequence into the prompt
\] : end a sequence of non-printing characters

エスケープ文字のために、プロンプト シーケンスが 読みづらくなりますが、少し勉強すれば慣れるでしょう。

シーケンス全体をシングル クォートで囲むことと、PS1= で始めることを忘れないでください。\u@\h: は、特殊文字の後に句読点を入れるための例です。同じようにして空白を入れることができます。クロージング コード \[\e[m\] ' は、最後の括弧の後に 空白があります。このコードにより、ドル記号の後に空白が入ります。
この例は、フォント色を端末のデフォルトに戻す例でもあります。次の例は、プロンプトの右側にフォント色を設定する方法を示しています。

$ PS1='\[\e[1;34m\][\d \t \u@\h \w]\$\[\e[m\] '
図 2 : シアン色で日付と時刻を表示させたプロンプト

色を多数使用することもできます (図 3)。

$ PS1='\[\e[1;36m\]\d \[\e[1;32m\]\t \[\e[1;33m\]\u@\[\e[1;35m\]\h:\w\$\[\e[0;31m\] '
図 3: 多数の色を使ったプロンプト

\[\e[0;31m\] のように最後にカラー コードを入れると、入力文字の色だけを変更できます。



複数行プロンプト

 ほとんどの端末は、80 文字表示です。そのため、長いプロンプトを作成すると表示できなくなります。ということで、複数行にしましょう。改行を意味する特殊文字 \n を使います。

PS1='\[\e[1;33m\]\u@\h \w ->\n\[\e[1;36m\] \@ \d\$\[\e[m\] '

 これにより、ユーザー名、現ディレクトリ、時刻、日付を表示できます(図 4)。矢印記号を使って、行が継続していることを示します。非特権ユーザーを意味するドル記号でプロンプトが終わります。

図 4: 複数行のプロンプト

 特権プロンプトは、# 記号です。プロンプトをカスタマイズするので、ルート ユーザーも 例外ではないでしょう。
以下を、~/.bashrc とルートの /root/.bashrc に格納します。

if [ $(id -u) -eq 0 ];
then
    PS1='\[\e[1;36m\][\d \t \u@\h \w]\$\[\e[m\] '
else
    PS1='\[\e[1;33m\][\d \t \u@\h \w]\$\[\e[m\] '
fi
sudosuで、ルートになり、 source ~/.bashrc を実行します。プロンプトが新しくなります。他のユーザーのように、ルートのプロンプトを 変更できます。以下のコマンドを使ってユーザーの ID 番号を 確認できます。

$id -u



プロンプトに fortune の格言を入れる

毎日のメッセージに話す牛を入れる」を思い出してください。以下を ~/.bashrc に追加することで、プロンプトに同じことができます。

[[ "$PS1" ]] && /usr/games/fortune | /usr/games/cowsay -n
図 5: プロンプトに「話す牛」を入れてみた


~/.bashrc いろいろ

~/.bashrc が存在しない場合は作成します。大半のディストリビューションでは、~/.profile からsourceします。以下のようにして、~/.profile に実装されていることを確認できます。

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi
fi
使用中の Linux が ~/.profile を使っていない場合は、~/.bash_profile~/.bash_login を探してください。これらもなければ、ちょっと変わった Linux を使用していると思います。ドキュメントを調べて、すべきことを確認します。設定を忘れた場合は、以下のようにして今の設定を表示できます。

$ echo $PS1 
Bash プロンプトをいじくりまわす方法は何万とあります。Bashリファレンスマニュアルを参照してください。

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ


Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!