複数のAmazon EC2アカウントがあり、スクリプトを使用して$EC2_HOME
などの変数をすばやく切り替えられるようにしたいと考えています。
次のように設定したシェルスクリプトがあります。
#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
スクリプトを実行すると、EC2_HOME
が設定されていることがわかりますが、export
を使用すると、スクリプトの完了後に変数が固定されると思いました。 echo $EC_HOME
を実行しても何も表示されないため、表示されません。
これは非常に初歩的なLinuxスクリプティングの知識でなければならないことは知っていますが、それは知りません。私は運が悪いのに関連する質問を探してみました-これが重複している場合は私の謝罪。
あなたはあなたのスクリプトを調達する必要があります
. ./script
または
source ./script
スクリプトを実行すると、独自のシェルと独自の環境が取得されます。これらは、スクリプトが終了するとすぐに消えます。環境変数を維持するには、スクリプトを現在のシェルにソースします。
$ source ./a.sh
または同等に(ただし、もう少し移植性があります) POSIXドットコマンド を使用します
$ . ./a.sh
次に、定義は現在のシェルの環境に入れられ、そこから起動するすべてのプログラムに継承されます。
スクリプトの実行に近づけるには、. a.sh
は、PATH
環境変数のディレクトリを検索してa.shを見つけます。
これらがどのように動作するか、そして.
とsource
は同じです(またはまったく存在します)。 . ./a.sh
はすべてのPOSIX互換シェルで確実に同じように動作しますが、source
および.
、. a.sh
および. ./a.sh
、異なる場合があります。 Bashの場合 source
および.
は同じです すべての場合; for zsh source
は常に現在のディレクトリを最初にチェックします ; kshは基本的に似ています。
スクリプト名がパスとして指定されている場合(/
)、そのパスはすべてのケースで直接使用されます。移植性が最も信頼できることは. ./script
または. /path/to/script
。
参考までに。
環境からシステムにエクスポートするインターネットからスクリプトを実行したい場合
次の形式を使用できます
source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh)
例えば:
source <(curl -s -L https://example.com/install.sh)