0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

bash 変数の export の 伝播

Posted at

bash 変数の export について確認

  • export した環境変数は、どこまで伝播するのか?
  • exec により,プロセス置換された場合は, 伝播するのか?

  • 環境変数「ABC_VAL」と「DEF_VAL」を A.sh で宣言
  • 「ABC_VAL」は、exportする
  • 「DEF_VAL」は、exportしない
  • 実行開始は、A.shとし、以下, B.sh -> C.sh -> D.sh と呼び出される
  • ただし、D.sh は、C.sh の中で、exec により、プロセス置換を前提として呼び出しを行う

<実行結果>

  • export された 変数は, 後続のシェルに引き継がれる
  • 後続シェル内で、exec によるプロセス置き換えの場合も同様に引き継がれる
# bash A.sh

A.sh : PID( 3574 ) PPID( 2387 ) BASHPID( 3574 )
A.sh : ABC_VAL[ abc ]
A.sh : DEF_VAL[ def ]
-----------
bash,2387
  `-bash,3574 A.sh
      `-pstree,3578 -aculp 2387

B.sh : PID( 3579 ) PPID( 3574 ) BASHPID( 3579 )
B.sh : ABC_VAL[ abc ]
B.sh : DEF_VAL[  ]
-----------
bash,3574 A.sh
  `-B.sh,3579 ./B.sh
      `-pstree,3583 -aculp 3574

C.sh : PID( 3584 ) PPID( 3579 ) BASHPID( 3584 )
C.sh : ABC_VAL[ abc ]
C.sh : DEF_VAL[  ]
-----------
B.sh,3579 ./B.sh
  `-C.sh,3584 ./C.sh
      `-pstree,3588 -aculp 3579

D.sh : PID( 3584 ) PPID( 3579 ) BASHPID( 3584 )
D.sh : ABC_VAL[ abc ]
D.sh : DEF_VAL[  ]
-----------
B.sh,3579 ./B.sh
  `-D.sh,3584 /tmp/GGG/D.sh
      `-pstree,3593 -aculp 3579

D.sh : terminated

B.sh : terminated

A.sh : terminated

<サンプルシェル・スクリプト>

A.sh
 --- A.sh ---
#!/bin/bash

        export  ABC_VAL="abc"
                DEF_VAL="def"

        echo
        echo "$( basename $0) : PID( $$ ) PPID( $PPID ) BASHPID( $BASHPID )"
        echo "$( basename $0) : ABC_VAL[ $ABC_VAL ]"
        echo "$( basename $0) : DEF_VAL[ $DEF_VAL ]"

        echo "-----------"
        env LANG=C pstree -aculp $PPID

        ./B.sh

        echo
        echo "$( basename $0) : terminated"

B.sh
--- B.sh ---
#!/bin/bash

        echo
        echo "$( basename $0) : PID( $$ ) PPID( $PPID ) BASHPID( $BASHPID )"
        echo "$( basename $0) : ABC_VAL[ $ABC_VAL ]"
        echo "$( basename $0) : DEF_VAL[ $DEF_VAL ]"

        echo "-----------"
        env LANG=C pstree -aculp $PPID

        ./C.sh

        echo
        echo "$( basename $0) : terminated"

C.sh
--- C.sh ---
#!/bin/bash

        echo
        echo "$( basename $0) : PID( $$ ) PPID( $PPID ) BASHPID( $BASHPID )"
        echo "$( basename $0) : ABC_VAL[ $ABC_VAL ]"
        echo "$( basename $0) : DEF_VAL[ $DEF_VAL ]"

        echo "-----------"
        env LANG=C pstree -aculp $PPID

        exec ./D.sh

        echo
        echo "$( basename $0) : terminated"

D.sh
--- D.sh ---
#!/bin/bash

        echo
        echo "$( basename $0) : PID( $$ ) PPID( $PPID ) BASHPID( $BASHPID )"
        echo "$( basename $0) : ABC_VAL[ $ABC_VAL ]"
        echo "$( basename $0) : DEF_VAL[ $DEF_VAL ]"

        echo "-----------"
        env LANG=C pstree -aculp $PPID

        echo
        echo "$( basename $0) : terminated"

確認に利用した bash

env LANG=C bash --version
# env LANG=C bash --version
env LANG=C bash --version
GNU bash, version 5.1.8(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Linux環境

hostanamectl
# hostnamectl
hostnamectl
 Static hostname: XXXXX
       Icon name: computer-laptop
         Chassis: laptop 💻
      Machine ID: XXXXX
         Boot ID: XXXXX
Operating System: Rocky Linux 9.6 (Blue Onyx)
     CPE OS Name: cpe:/o:rocky:rocky:9::baseos
          Kernel: Linux 5.14.0-570.23.1.el9_6.x86_64
    Architecture: x86-64
 Hardware Vendor: TOSHIBA
  Hardware Model: dynabook R734/M
Firmware Version: Version 5.10
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?