14,346 views
この記事は最終更新から 1812日 が経過しています。
(1) 引き継げない例
以下のようなシェルスクリプト mysh.sh を作成する。
#!/bin/sh export PATH=~/mybin:$PATH
これを実行してみる。
[user@linux]$ ./mysh.sh [user@linux]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
あれっ? 設定が効いていない。
基本的に親プロセスは子プロセスが設定した環境変数を引き継げない。
(2) 引き継げる例
これを実行してみる。
[user@linux]$ source ./mysh.sh
[user@linux]$ echo $PATH
/home/user/mybin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
今度は設定が効いている!
sourceコマンドでスクリプトを実行すると、そのスクリプトはカレントシェル上で実行される。
すなわち、環境変数はカレントシェル上で設定されたものとなる。
→ 子プロセスの環境変数を親プロセスが引き継いだように見える。
ちなみに source の代わりに . でもよい。
[user@linux]$ su - user
Password:
[user@linux]$ . ./mysh.sh
[user@linux]$ echo $PATH
/home/user/mybin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
これでも設定が効いている!