![Posixシェルスクリプトから環境変数をエクスポートする方法は? [閉鎖]](https://linux33.com/image/118259/Posix%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%8B%E3%82%89%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%82%92%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
ターゲット:ソーススクリプトで生成された環境変数を使用するPosix互換shスクリプトを生成します。
/dir/var.sh環境変数を生成するには、次の項目のみを含めます。
export IPTABLES="/usr/sbin/iptables"
/dir/startup.sh以下の内容が含まれています。
#!/bin/sh
. /dir/var.sh
$IPTABLES options
command1 #Does not use an environmental variable
完了すると、startup.sh
変数は生成されないか存在しません。なぜ?
注:オペレーティングシステムのファームウェアは読み取り専用です。すべてのシェルで使用可能な環境変数を設定するために/ etc / profileファイルを編集することは許可されていません。変数をエクスポートするスクリプトは遅すぎます。
答え1
より関連ウィキペディアページ:
Unixでは、スクリプトまたはコンパイラで変更された環境変数は、そのプロセスとサブプロセスにのみ影響を与える可能性があります。親プロセスや無関係なプロセスは影響を受けません。
調達(*)には、現在のプロセスにスクリプトが含まれています。var.sh
したがって、スクリプトで定義された環境変数はスクリプト内で確認できますstartup.sh
。
OTOH、startup.sh
ソースではなく呼び出されます。したがって、WPページで述べたように、これは子プロセスです。このスクリプトで生成されたすべての変数は、スクリプトの最後に削除されます。
(*)source script.sh
または. script.sh
。 OPコメントの他の人が述べたように、ソーススクリプトへの相対パスを指定することは、. ./dir/var.sh
呼び出しの場所によって異なるため、悪い考えですstartup.sh
。