• 締切済み

UNIX(Bシェル)のプロンプトについて

Bシェルのプロンプトの設定は環境変数PS1に変えたい文字列を入れればOKですが、現在自分のいるディレクトリ名を表示させたい場合はどのようにしたらいいでしょうか。 PS1="["`pwd`"]" などと設定してもディレクトリが変わったらその設定したときのディレクトリ名のままです。  また、ユーザ名も表示したいのですがsuコマンドでユーザ名を切り替えた場合プロンプトに表示させたユーザ名も変更させることはできるのでしょうか?

みんなの回答

回答No.3

純粋な sh でそれをやれとは酷な要求ですねぇ。 まず、su に関しては、最悪でも /usr/bin (unix によっては /bin ?) より前のパスに、su っていう名前のシェルスクリプトを置いて、 適当にいじればいいかと思います。こっちは不可能ではない。 でも、cd は sh の仕様によっては無理かもしれません。シェルス クリプトでは、親のディレクトリを変更できません。alias 機能が あって、cd を上書きできたとして、本来の cd を実行できる機能 がないと、やはりつまづきます。最近の sh なら、alias に似た function 機能がありますが、例えば SunOS の sh だと、cd コマ ンドの上書きはできないようです。FreeBSD の sh と、Laser5 linux の bsh なら、次のようにできると思います。 cd () { command cd $1; PS1="`pwd` "; }

nuky
質問者

補足

OSはSunOS 5.6です。cdはできませんでした。 suの方もユーザーが変った時点でシェルの実行がストップしてしまうのかsu以降のコマンドが実行されませんでした。

すると、全ての回答が全文表示されます。
  • will-y
  • ベストアンサー率22% (48/214)
回答No.2

PS1='[$PWD]'とすればうまくいかないでしょうか? PS1='$PWD \!:'というのもできますね。

すると、全ての回答が全文表示されます。
回答No.1

sh から派生した bash や、zsh ならば、PS1 に適当な記号を設定 すると、ご希望のことができますが、本来の sh では、PS1の設定 だけでは無理かと思います。もっとも、sh といいつつ、bash か zsh か他の拡張された sh を使っている場合もあるので、詳細はマ ニュアルを見た方がいいと思います。 bash 系ならば、\u でユーザ名、\w でディレクトリ名に展開され ます。zsh 系ならば、%n でユーザ名、%d か %~ でディレクトリ名 に展開されます。 もしこういった機能がなくて、alias 機能があるなら、cd と su を alias して、PS1 を変更してから実際のコマンドを実行するよ うにするという手もあるでしょう。

nuky
質問者

補足

そうなんです。bashならできるんですけど、shでやれといわれたんです。上司に・・・ 自分でもいろいろ調べてみたんですが、コマンドを見張りつつPS1の値を変更していくようなシェルを書かないとできないような気がします。

すると、全ての回答が全文表示されます。

関連するQ&A