日々之迷歩

世の中わからんことだらけ

ITが複雑で難しくなっていく様に翻弄される日々です。微力ながら共著させていただいた「シェル・ワンライナー160本ノック」をよろしくお願い申し上げます。

シェルプロンプトのちょっとしたこだわり

UNIX系の環境(cygwin含む)では、シェルは基本的にbashを使う主義だ。昔はインタラクティブな作業のためのログインシェルはcshかtcshを、シェルスクリプトではshと使い分けていたが、bashを使うようになってログインシェルはbashだ。

シェルプロンプトの使い勝手を考えると、ユーザー名、サーバ名、カレントディレクトリのフルパスが表示されて欲しい。カレントディレクトリはどこ?はもちろんのこと、複数のターミナルで複数のサーバにログインして作業していると、操作対象のサーバを間違えた!とかを未然に防ぎたいのだ。

ということで以下の設定を.bashrcに記載して使っている。\uがユーザー名、\hがマシン名、\wがカレントディレクトリのフルパスだ。また\nで改行される。

PS1='\n\u@\h:\w\n\$ '

プロンプトを改行して次の行にカーソルが出るようにしているので、カレントディレクトリのフルパスが長くなっても見やすい。

papiro@server1:/usr/local/share/vim/vim71/autoload/xml
$ ls
html32.vim      html401t.vim    html40t.vim     xhtml10t.vim    xsl.vim

また、ホームディレクトリ以下の場合は、カレントディレクトリまでが'~'で表示されるので簡潔になる。

papiro@server1:~/rails/project1
$ ls
README          config/         lib/            script/         vendor/
Rakefile        db/             log/            test/
app/            doc/            public/         tmp/


マシン名を\HにしてやるとFQDNで表示される。

PS1='\n\u@\H:\w\n\$ '

こうすると、scpとかでコピーする時に、プロンプトのところをコピペすると少し簡単になるのかな?

papiro@server1.example.com:~/rails/project1
$ ls
README          config/         lib/            script/         vendor/
Rakefile        db/             log/            test/
app/            doc/            public/         tmp/


シェルプロンプトをこうやったきっかけは、cygwinのbashプロンプトが以下のようになっていて、なかなか使いやすかったからだ。

PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

エスケープシーケンスを使うことで、ユーザー名@マシン名が緑、カレントディレクトリのフルパスが黄色に表示される。

papiro@pc1 /usr/share/vim/vim72 $ ls autoload/ evim.vim gvimrc_example.vim macros/ scripts.vim vimrc_example.vim