• 締切済み
  • 困ってます

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

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

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数676
  • ありがとう数0

みんなの回答

  • 回答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` "; }

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • Cシェルのかっこいいプロンプト設定教えてください。

    わーい。二番のりぃ!! まじめで簡単な質問でーす。 C-shellでプロンプトの設定を変えたいのですが、 どうすればよいのでしょうか? [ユーザー名]/usr/local/bin > 上記のように、ユーザー名とカレントディレクトリ名くらいは出したいんですけど。。。 set prompt=%pwd%"->" じゃだめですよねぇ。。。。。 欲を言えば、ホスト名も出したいのですが。。。。

  • UNIXのシェル、環境設定について教えてください。

    こんにちは。 UNIXについて詳しく勉強したいとおもっています。 コマンドなど基本的なファイル操作についてはある程度わかるのですが、UNIXの環境設定、環境変数、シェルなどの物につまづいています。 「環境変数って一体なんだよ!」 「シェルのBシェル、Cシェルって・・・」 こんな感じです。 これらについて初心者でもわかるような本、サイトを教えてください。 あと、初心者すぎて恥ずかしい質問なのですが、UNIX系OSにはいろいろな種類があるのは知っているのですが、「UNIX」という名前のOSはあるのでしょうか? また、Teratermを使っているのですが、これって何ていう名前のOSなのでしょうか? 最後に、会社なのでは、SolarisとLinuxどちらが多く使われているのでしょうか? これらの質問に詳しい諸先輩方アドバイスの方をよろしくお願いします。

  • su で化けたときのプロンプトとエイリアス

     最近 Linux マシンを使い始めました。  それで、CUIのコンソール画面(bash)に関する疑問なのですが、su で化けると設定が変になるのはなぜなのでしょうか。  プロンプトは $PWD> と表示されてしまい、エイリアスも利かなくなります。  .bashrc は /home/root に置いてあるので、読まれてないわけではないようなのですが……。  なんとか su で化けても設定が有効であり続ける方法はないものでしょうか。  プロンプトが駄目なら、せめてエイリアスは共通化したいです。  何か方法をご存知の方がいらっしゃいましたら、よろしくお願いします。

  • 回答No.2
  • will-y
  • ベストアンサー率22% (48/214)

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 を変更してから実際のコマンドを実行するよ うにするという手もあるでしょう。

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • 起動シェル内の「. 」について

    アプリケーションサーバーの起動スクリプトに以下のような記述がありました。 この記述は現在のシェルのディレクトリを取得して、環境変数を設定するしシェルを呼び出す記述だと言うのは分かるのですが、最初の「. 」ドットスペースは何をしているのでしょうか? binDir=`dirname $0` . $binDir/setupCmdLine.sh

  • シェルからJavaを起動したい

    シェルからJavaを起動したい 上記ですけど、Linuxで毎回「java パッケージ名.クラス名」を打つのは面倒なので、 シェルスクリプトのファイルを作って、それを実行するだけで起動できるようにしようと思っています。 が、クラスが見つからないってエラーが出て実行できませんでした。 (「java パッケージ名.クラス名」を実行しているディレクトリにシェルを作ってます) 恐らく環境変数などの設定がシェルの中にいるのではないかと思いますが、 シェルスクリプトとかLinuxの環境には疎い為、どういった記述が必要なのか解りません。 どなたか例を提示して頂けないでしょうか? ちなみに、一般的なJavaの環境変数や、 プロジェクト特有・jarファイル等の環境変数は設定済みです。 それから、シェルは以下のように記述してます。 #!/bin/sh java パッケージ名.クラス名 よろしくお願いします。

  • Linuxでの質問。(echoコマンドなど)

    Linuxでの質問。 1.echoコマンドで* $home=' home ' (ただし home はシェル変数homeの値)と表示したい。echoコマンドにどのようは引数を渡せばよいのでしょうか。 実行例 % echo 適切な引数 * $home='/home/gbu/myname' 答えは echo \* "\home="\'$home\' でよろしいですか。 echo \* '$home='\'$home\' と入力しても同じ結果が出るのですが、どっちでいいでしょうか。 2.次の2つのコマンドラインは実行結果が異なる。その違いが生じる理由は何でしょうか。 % cd ; (cd / ; pwd) ; pwd % cd ; cd / ; pwd ; pwd まったく初心者です。manコマンドを使って調べたのですが。。 man () って入力しても、何にも出なくて、ぜひ教えてください。お願いします。 3.演習課題にならって、 エイリアスが子プロセスのシェル(サブシェル)に引き継がれるかどうかを確かめる手順の例を示しなさい。っていう課題が出ました。どういうふうにやればいいでしょうか。教えてください。 演習課題 シェル変数と環境変数の違いの確認 % set foo=1 シェル変数fooに値を設定する。 % setenv FOO 1 環境変数FOOに値を設定する。 % echo $foo シェル変数fooの値を表示する。 % echo $FOO 環境変数FOOの値を表示する。 % tcsh 子プロセスとしてシェルを起動する。 (ここから、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値の表示を試みる。(引き継がれていない。) % echo $FOO 環境変数FOOの値を表示する。(引き継がれている。) % set foo=2 シェル変数fooに値を設定する。 % setenv FOO 2 環境変数FOOに値を設定する。 % exit 子プロセスとしてシェルを起動したシェルを終了する。 (ここまで、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値を表示する。(子プロセスでの変更は影響しない。) % echo $FOO 環境変数FOOの値を表示する。(子プロセスでの変更は影響しない。) エイリアスの意味を調べたのですが、「コマンドを別名で登録したもの」と解釈されていて、これはどういうことなんでしょうか。 この問題の意味は、課題にならって set alias=1 と設定して、次は setenv ALIAS 1 そして、課題のように、fooのとこをalias、FOOのとこをALIASと変えて、最後echo $ALIAS を調べればいいのですか。 学校の宿題ですが、やってもぜんぜん意味不明なので、助けてください。

  • シェル変数とパイプ

    シェルの変数にパイプを入れた文字列(コマンド)を格納し、それを実行したいのですが、「|」がただの文字として扱われているようでうまく実行できません。 どのように記述すれば、パイプとして認識してくれるのでしょうか? 次のようなことをやりたいのですが、このようにエラーになってしまいます。 # setenv cmd "ls | grep test" # $cmd ls: |: そのようなファイルやディレクトリはありません ls: grep: そのようなファイルやディレクトリはありません ls: test: そのようなファイルやディレクトリはありません

  • シェルによる環境変数の設定方法

    シェルによる環境変数の設定方法に関して質問があります。 ・二つのシェルファイルA.shとB.shがあります。 ・A.shの中でexportを使って環境変数を設定しています。 ・B.shの中でA.shを呼んでいます。 この場合、B.shを実行したコンソールにはA.shで設定した環境変数が設定されません。 B.shを実行したコンソールに別ファイルA.shが設定した環境変数を設定するには どのようにすればよいのでしょうか? 分かる方がいたら教えて下さい。宜しくお願い致します。

  • ログインシェルと対話型シェルの区別について

    ログインシェルと対話型シェルの区別について理解していません。  ログインシェルはpsコマンドで見たときに-bashと表示されると書籍にありました。  テキストログイン(init 3)してpsコマンドをうっても-bashになっていません。  ご存知の方、いらっしゃいますでしょうか?

  • シェルから起動するコマンドの一部をマスクする

    シェルから起動するコマンドの一部にパスワードなどのセキュリティ情報が含まれている場合、それをpsコマンドなどによって見えなくするには、一般にどのような手法が採られているのでしょうか。 例えば、 #!/bin/sh USER=hoge PASS=hogehoge foo -u $USER -p $PASS というシェルを実行した時に、psコマンドで見ると foo -u hoge -p hogehoge と出ては困るわけで、 foo XXXXXXXX とかいう表示にできるとありがたいです。XXXXXXの部分は、ユーザ名やパスワードが表示されなければ、どんな表示でもいいんですけど…。

  • cシェルについて(その1)

    質問です。 以下のように表記されている場合 @ XXXnum=0 XXXchk: @ XXXnum++ if ($XXXnum > 3 ) then goto XXXerror とある場合、XXXnumはふつうの変数(環境変数等ではなく) と考えてOKなのでしょうか? (@マークについてよく解らないもので) またCの様に(関数の)頭で宣言しなくて宜しいのでしょうか? また、XXXchk:とは関数のくくりで終わる場合単に、 end の表記だけでよいのでしょうか? (XXXchk:が関数の頭だとするとこれの中にも一つ同じ様な表記があって  endが一個しかないのも疑問なんですが) cシェルと言うよりシェル全般に関して初心者なんで、宜しくお願いいたします。

  • カレント・ディレクトリを常にタイトルバーに表示したい

    Windows XPのコマンド・プロンプト(cmd.exe)で、カレント・ディレクトリを常にタイトルバーに表示する方法はないでしょうか? プロンプト文字列を">"一文字にしてすっきりさせたいのですが、カレントディレクトリも常にわかるようにしたいと思っています。

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。