見えざるものを見よこれぞ博打の真骨頂

今日も新たな発見がありました・・・・。
ほんとにもう何年やっとんねんみたいな話。
きっと・・・おそらく・・・多分・・・常識なんだろうなぁ。

やりたい事は変数をexportするという事。

↓のようなコードで変数をexportさせたいと。

$ HOGE=ABC
$ echo $HOGE
ABC

で↓のコードを書きましたとさ。

$ cat env.sh
HOGE=ABC
export HOGE

これでexportされるだろうと実行しましたとさ。

$ bash -x env.sh
+ HOGE=ABC
+ export HOGE

めでたくexportされませんでしたとさorz

$ echo $HOGE

$

恥ずかしながら何故だか見当がつかず暫らく悩みました。
そして原因判明↓のコードで分かると思います。($$はperlと同じくpid)

$ cat pid.sh
echo $$
$ echo $$; bash ./pid.sh
41252
41936

pidが違う・・・・。

そうつまり起動したプログラムは別プロセス、つまり別セッションで動いてました。
なのでexportしても今いるセッションからは変数掴めないと。

でこういう時はどうするかというと

can be executed within the running shell's process

って訳で.bash_profileとか.bashrcでお馴染みsourceを使うとさ。

これでめでたく・・・・・

$ source env.sh
$ echo $HOGE
ABC

できた!

それではお休みなさい・・・・。