vine-users ML アーカイブ



[vine-users:053814] Re: bash 起動時に環境変数 i だけが消えてしまう

  • From: "OOSATO,Kazzrou" <kazz@xxxxxxxxxxxxxx>
  • Subject: [vine-users:053814] Re: bash 起動時に環境変数 i だけが消えてしまう
  • Date: Thu, 26 Sep 2002 18:19:28 +0900
おおさとです。

> From: ueda@xxxxxxxxxxxxxxxxxx
> Subject: [vine-users:053813] Re: bash 起動時に環境変数 i だけが消えてしまう
> Date: Thu, 26 Sep 2002 16:55:36 +0900
> Message-ID: 200209260755.QAA03390@xxxxxxxxxxxxxxxxxxxxxxxxxxxx

> >> i といういかにもユーザが使いそうな変数を消されてしまうのが悩ましいです。
> 
> 大里> たとえば、ユーザ名_ENV_i とか、サブシステム名_value_i などだった
> 大里> ら、いかにもユーザが使いそうな環境変数名ではありますが、
> 大里>   for i in foo; do bar; done
> 大里> は、あまりにポピュラーな常套句なので、export i などとやばいこと
> 大里> をするユーザがいるとは、私には信じられませんけど。
> 
> うーん。どっちがヤバいかは、議論が分かれる気がします。
> ポピュラーな常套句だけに、システムが勝手にそれを使って(変更して)
> 良いのかという気がするんです。

いや、だから bashrc 中では i は本来シェル変数として扱われる
意図なのに、それをユーザが勝手に環境変数に変更して bashrc に
意図しない作用をおこさせるのがまずいと言っているわけです。
シェル変数として常用されやすい名前を環境変数にするなというこ
とです。

> for i in 1 2 3 4 5; do
>     for j in 1 2 3 4 5; do
> 	qsub -v i,j 変数iとjを使うバッチスクリプト
>     done
> done

その、qsub がどういうものか分からないので、確かなことは言え
ないのですが、本来はこういう場合、
   . qsub -v i j
として使うべきものなんじゃないでしょうか。

> ええと、変じゃないです。可能なら一切禁止したいです。
> 正確に言うと、 /etc/bashrc や /etc/profile のようにユーザが意識せずに
> 使う(使ってしまう)スクリプトでは、できるだけユーザの環境変数やシェル変
> 数を汚さないようにした方がよいと考えています。変ですか?

「bashrc や profile」ではなくて「bashrc」、「環境変数やシェル
変数」ではなくて「環境変数」と直すとその通りです。
bashrc の中で環境変数をいじってはいけません。いいかえると、
bashrc の中でシェル変数として使われそうな名前の環境変数を作っ
てはいけません。 
bashrc と profile の違い、環境変数とシェル変数の違いをお考え
下さい。

-- 
  ;      kazz@xxxxxxxxxxxxxx
  ;     oosato@xxxxxxxxxxxxx
  ; 大里和朗@江戸川区西葛西