シェルスクリプトでソース環境変数をエコーとして見ることができないのはなぜですか?

シェルスクリプトでソース環境変数をエコーとして見ることができないのはなぜですか?

次のシェルスクリプトがあります。

cron_job.sh

#!/bin/bash

source /home/ec2-user/src/.config

私はこれをこうして使う./cron_job.sh

$DB_NAME.configにインクルードコンテンツをエコーすると、何も表示されません。コピー貼り付け(ソースコマンド)を切り取ると、この値がsource /home/ec2-user/src/.config表示されますecho $DB_NAME。概念的に何が起こっているのでしょうか?そして、何が起こっているのかを理解するために、マニュアルページをどのように使用できますか?

/home/ec2-user/src/.config

cat /home/ec2-user/src/.config
export DB_NAME="market"

echo_vars.sh

#!/bin/bash

echo $DB_NAME

シェル

[ec2-user@ip-172-31-28-94 ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
[ec2-user@ip-172-31-28-94 ~]$ echo "$SHELL"
/bin/bash
[ec2-user@ip-172-31-28-94 ~]$ ./cron_job.sh
[ec2-user@ip-172-31-28-94 ~]$ ./echo_vars.sh
[ec2-user@ip-172-31-28-94 ~]$
[ec2-user@ip-172-31-28-94 ~]$ echo $DB_NAME
[ec2-user@ip-172-31-28-94 ~]$
[ec2-user@ip-172-31-28-94 ~]$ source /home/ec2-user/src/goldbase/.config
[ec2-user@ip-172-31-28-94 ~]$ ./echo_vars.sh
app_db

ベストアンサー1

を実行する新しいシェルを作成しています./cron_job.sh。別のファイルをインポートして終了します。

終了すると、すべての変数の状態が失われます。

あなたとあなたの子供にのみエクスポートしてください。したがって、プロセスが終了すると状態は失われます。ソースを使用すると、スクリプトは同じプロセスからファイルを読み取ることができるため、変数は保存されます。ただし、プロセスが終了すると、まだ失われます。

下のファイルにechoを入れるとsourceうまくいきます。


環境変数をチェックしないことに注意してください(可能ですが、興味がないだけです)。この変数はシェルによって拡張されます。

シェルスクリプト名は.で終わらないでください.sh。いつか問題が発生する可能性があります。

おすすめ記事