Necoです。 In Message-Id <20000925.173203.78776649.tshiozak _at_ astec.co.jp> "T.SHIOZAKI" <tshiozak _at_ astec.co.jp> さんwrites: > 塩崎です。 > > LANG=C じゃなくて LC_ALL=C かもしれないです。 > > ( LC_ALL=C; /sbin/cfdisk ) > > と、やってみたら? > > 戻すの面倒だから、不精者の私は export はしない。 > > 問題の本質とは関係ないですが、単に一時的に環境変数を設定したいだけなら、 いや、ここは問題の本質に関わるのでツッコミ入れて貰わないと。 そもそもこの手の話は shell 依存なんで shell を特定しないと話 が進みません。 ここでは shell は bourne shell 系に限定して話を進めますね。 csh 系ではこの辺りの話は無効です。とゆーか csh では出来ない 機能が多いんでパス。 > LC_ALL=C /sbin/cfdisk > > でできます :-) これと先の「( LC_ALL=C; /sbin/cfdisk )」とは全く異なる挙動 を示します。塩崎さんの書き方じゃないと cfdisk に locale 値は 伝わりません。 実際にこの例でうまくいっている環境もあると思いますが、それ は shell が login shell として起動された際に予め LC_ALL が環 境変数として定義されていただけの話です。一般にはこのことは保 証されません。 戻すのが面倒だかどうだか知りませんが、shell 変数と環境変数 の違いを正しく認識しておかないと思わぬところで失敗すると思い ますので、気をつけて下さいね。 基本的には「VAR=val」という形式のコマンドでは shell 変数の 内容が変更されます。これはその shell に local な変数で、その shell から起動した子 process には伝わりません。 shell 変数を環境変数にするコマンドが「export」で、環境変数 は子 process に伝わりますから「VAR=val; export VAR」とすれば 以降起動した子 process はこの値を参照出来ます。 一旦環境変数化した shell 変数は unset するまで環境変数であ り続けるので、「export VAR; VAR=val」という順序でも構いませ んし、二回目からは「VAR=val」だけでも構いません。 bash の場合はこの 2 コマンドを短縮して「export VAR=val」と いう形式で実行することも出来ます。 これに対し、「VAR=val command」という書き方があります。こ れは良く似ていますが shell 変数への代入とは異なり、一時的に 環境変数に代入することを表しています。 export の場合はその後も unset しない限りずっとその環境変数 が有効なのに対し、「VAR=val command」形式ではここで起動した 「command」という子 process にのみこの環境変数が有効となりま す。 この形式ですと、「command」以外の子 process はおろか、shell 自身にすらこの「VAR」の値は参照出来ませんので、後でわざわざ 元に戻したり sub shell 化したりする必要がありません。 局所的に環境変数を用いたいときの常套手段ですね。例えば日本 語環境の中で man page の原文に当たりたい時は「LANG=C man man」 などとします。 ここからは余談になりますが、bourne shell 系の shell には環 境変数に絡んだ shell option が二つ用意されています。-a と -k です。 それぞれ、起動時に「sh -a」のように option 引数として指定 するか、もしくは起動後に「set -a」のように set コマンドを用 います。元に戻すのは「set +a」。 -a option を有効にすると、以降定義された全ての shell 変数 は同時に環境変数にもなります。-a option が有効になる前のもの については依然 shell 変数のままです。 -k option を有効にすると、「VAR=val command」形式の代入文 を command line の任意の位置に記述出来るようになります。この 時には例えば「man LANG=C man」といった記述も可能です。 面倒臭がり屋の人にはこういった option が打って付けかも知れ ませんね。 白井 隆 (as Neco)
Follow-Ups:
- [linux-users:74000] Re: ハードディスク増設についてT.SHIOZAKI
- [linux-users:74010] Re: ハードディスク増設についてOOSATO,Kazzrou
- [linux-users:73970] Re: ハードディスク増設についてT.SHIOZAKI
- Prev by Subject: [linux-users:73996] Re: GZIP の修復
- Next by Subject: [linux-users:73998] Re: [ANN] LUKYオフ会のお知らせ
- Previous by thread: [linux-users:73973] Re: ハードディスク増設について
- Next by thread: [linux-users:74000] Re: ハードディスク増設について
- Indexes:[Main][Thread]