
次のシェルスクリプトがあります。
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
。いつか問題が発生する可能性があります。