[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:17141] Re: konの後でfortuneを動作させるには



やなぎ@名古屋です。

おそらく、bashとkonの関係を理解されれば自然と
解決できると思いますので、そのあたりを最初に。

ログインシェルのbashからkonを起動すると、以下のように動作します。
(1) bashがkonを起動
(2) 起動したkon上で新しいbashが走る
ここで、kon起動前のbash(便宜上、bash1と呼びます)と
kon起動後のbash(同じく、bash2)は別物です。

以上を踏まえた上で、河村さんと松本さんのスクリプトを見てみると、
このようになります。


From: "nori" <ja5ibp@mx81.tiki.ne.jp>
Date: Sun, 22 Dec 2002 11:30:29 +0900
Subject: [plamo:17140] Re: konの後でfortuneを動作させるには

> plamo3.0の.bash_loginを元に
> 
>     .$HOME/.bashrc
> 
>     # kon :loginと同時にkonする
>     if [ $TERM = linux ]; then
>     kon

      (途中略)

>     fi
> 
> なんていうのを作ってみました。

[河村さんのスクリプトの場合]
bash1が起動されたとき、.bash_loginを実行します。
このときの$TERMはlinuxは1となっています。
ですので、if [ $TERM = linux ] は真となりkonを実行します。
ここでのポイントは、
「bash1はここでkonの終了待ちをするため、以降の処理が実行されない」
ということです。

konを実行するとbash2が起動されますが、これはbash1とは別ですので、
.bash_loginを最初から実行します。
ちなみに、この時の$TERMはkonとなっています。
そのため、if [ $TERM = linux ] は偽となり何も実行されない
ということになってしまいます。

konを終了すると、終了待ちしていたbash1が再開され、
以降の処理(biff/fortune)を実行します。

> > if [ "$TERM" = "linux" ]; then
> >   /usr/bin/kon
> >   exit
> > fi
> > if [ "$TERM" = "kon" ]; then
> >   [ -f /usr/spool/mail/$LOGNAME ] && echo -e "You have mail.\n"
> >   [ -x /usr/games/bin/fortune ] && /usr/games/bin/fortune
> > fi

[松本さんのスクリプトの場合]
bash1が起動されたとき、.bash_loginを実行します。
河村さんの場合と同様に、if [ $TERM = linux ] は真となり
konを実行しますが、前述のようにbash1はここで
konの終了待ちをするため、exitはまだ実行されません。

konを実行してbash2が起動された時、.bash_loginを最初から実行します。
$TERMはkonとなっているため、if [ $TERM = linux ] が偽となり
konが二重に起動されてエラーになることもなく、
if [ $TERM = kon ] が真となりechoとfortuneが実行されます。

konを終了すると、終了待ちしていたbash1が再開され、
以降の処理exitを実行しログアウトします。
なので、
> せっかくkonしたのにすぐexitしてしまっては、
> その後$TERM  = konは常に偽になるように思うのですが
ということもありませんし、
> うまくできているなと思うのは、この状態でexitすると
> KON>finishedの状態に戻るのでなく
> login前の状態に戻るということです
> うまくできていますね。
ということになります。

> また$TERMなどを " で囲むのと囲まないのではどのような
> 違いが出てくるのでしょうか。

$TERMの値が空のとき、スクリプトが構文エラーとなるのを
防ぐためです。
現実問題、$TERMが空になる状態はないと思いますが、
他の環境変数の場合も同様ですので、
`"'で囲むくせをつけておいた方が無難です。

長々と失礼しました。
それでは。
--------
	柳 真二(mailto:lusr@catnip.freemail.ne.jp)

Follow-Ups
[plamo:17142] Re: konの後でfortuneを動作させるには, nori
References
[plamo:17131] konの後でfortuneを動作させるには, nori
[plamo:17139] Re: konの後でfortuneを動作させるには, Norimasa Matsumoto
[plamo:17140] Re: konの後でfortuneを動作させるには, nori

[検索ページ] [メール一覧]
Plamo ML 公開システム