(67) 子プロセスの環境変数を親プロセスが引き継ぐ

投稿者: | 2017年10月7日

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

これでも設定が効いている!


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です