twitter icon   twitter icon   rss icon

Linux.com Japan

Home ニュース Linux.com Exclusive 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人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2017/06/16 2017年 6月 15日
  2. Today's Linux 2017/06/19 2017年 6月 18日
  3. Today's Linux 2017/06/20 2017年 6月 19日
  4. Today's Linux 2017/06/21 2017年 6月 20日
  5. Today's Linux 2017/06/26 2017年 6月 25日

Linux Foundationについて

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

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

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

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

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

乞うご期待!