vine-users ML アーカイブ



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

  • From: ueda@xxxxxxxxxxxxxxxxxx
  • Subject: [vine-users:053809] bash 起動時に環境変数 i だけが消えてしまう
  • Date: Thu, 26 Sep 2002 14:25:06 +0900
上田と申します。

Vine 2.1CR を使っています。

bash を起動すると環境変数 i だけが消えてしまうと言う症状を見つけました。
PBS で バッチジョブに環境変数を渡そうとして気がつきました。

i といういかにもユーザが使いそうな変数を消されてしまうのが悩ましいです。
sh, csh, bash2 では起きず、bash -norc でも起きません。

%[1] i=2; export $i
%[1] j=3; export $j
%[1] echo $i.$j
2.3
%[1] bash
%[2] echo $i.$j
.3
%[2] exit
%[1] echo $i.$j
2.3

原因はシステムのbashrc (/etc/bashrc)です。
bash-1.14 の問題なのか distribution の問題なのかは良く分かりません。

以下のパッチで一応解決出来ます。関数で括って local で変数を保護してあ
ります。
この方法でも関数名を一つ消費してしまうのは確かなのですが、
あまり使わなさそうな関数名を選んだのと、関数を export するユーザは少ない
だろうとこうしました。

もしも次のバージョンでもbash2でなくbashを標準のshellとするなら、修正を
検討して頂けると嬉しいです。

よろしくお願い致します。

=====================
*** /etc/bashrc.org Thu Sep 26 13:15:12 2002
--- /etc/bashrc Thu Sep 26 13:07:21 2002
***************
*** 11,27 ****
--- 11,33 ----
      case $TERM in
        xterm*)
            PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
            ;;
        *)
            ;;
      esac
      PS1="[\u@\h \W]\\$ "
  fi   
  
+ function BASH_AUTO_LOAD_SYSTEM_PROFILE () {
+ local i;
  for i in /etc/profile.d/*.sh; do
      if [ -x $i ]; then
         . $i
       fi
  done
  
- unset i
+ }
+ 
+ BASH_AUTO_LOAD_SYSTEM_PROFILE
+ unset -f BASH_AUTO_LOAD_SYSTEM_PROFILE
=====================

--HAL
========================================================================
(株)富士通研究所 ITコア研究所 ITアーキテクチャ研究部 上田晴康
E-mail: hal_ueda@xxxxxxxxxxxxxx
========================================================================