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