メモの日々


2008年05月08日(木) [長年日記]

[ruby] 配列の配列からハッシュを生成

Enumerable#inject() を使うとわりと簡単に書ける。

p [[1, 2], [3, 4]].inject({}) {|h, a| h[a[0]] = a[1]; h}
#=> {1=>2, 3=>4}

これがフツウの方法かは知らない。

[shell][unix] 環境変数の設定

基本的なことだがおれはよくわかってないみたい。

今まで環境変数は .zprofile(bashの場合は .bash_profile)内で設定していたが、これだとgdmからログインしてgnomeを使う場合に環境変数が設定されないことに気づいた。UnixのGUIはほとんど使わないので知らなかったが、gdmやxdmからログインする場合「ログインシェル」は起動されないようで、従って .zprofile は読み込まれない、ということみたい。

だから、対話シェルで使いたい環境変数の設定は .zprofile ではなく .zshrc に書かないといけない。.zprofile にはなるべく何も書かない方がよさそう。[debian-users:16041] Re: 環境変数の設定

> という利用方法が推奨されていたと思いますので、.bashrcにはあま
> り環境変数の設定を入れないのが普通なのではないかと思っています。

昔はそんなことも言われましたが、X、特にxdmが一般的になるにつ
れ、ログインシェル用と、その他の対話的シェル用の初期化ファイ
ルを分けないのが常識になりました(と思います)。
# (あんな昔の)「続たのしいUNIX」にすらそう書かれていたような…。

なんて話もあった。

が、再帰的に設定する環境変数などは .zshrc には書きたくない。例えば

export PATH=~/bin:$PATH

を .zshrc に書くと子シェルが起動される度にPATHに同じ値(上の例だと ~/bin)がどんどん追加されてしまい嫌だ。 世の中の人はどう設定しているのかな。検索してもいい方法は見当たらなかった(とほほ)。

仕方ないので、再帰的に設定したい変数は .zprofile の方に戻した。これだとgdmからログインしたときにこの設定が有効にならないが、手元のUbuntu 7.10ではgdmからログインする際に ~/.profile が読み込まれるようになっているようなので、.zprofile に書いたのと同じことを .profile にも書けばなんとかなる。変だけど。

ちなみにgdmからログインする際の設定は .xsession に書けばいいのかと思ったが、.xsession ファイルを作成するとログイン処理の途中でエラーになってしまいログインできなくなる。なんでや。