シェルスクリプトで「エクスポートされた」環境変数をどのように保存しますか?

シェルスクリプトで「エクスポートされた」環境変数をどのように保存しますか?

Amazon EC2アカウントが複数あり、$EC2_HOMEたとえばスクリプトを使用して変数をすばやく切り替えることができるようにしたいと思います。

次のようにシェルスクリプトを設定しました。

#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME

私はスクリプトを実行するときに設定されてEC2_HOMEいることを知っていますが、使用するとexportスクリプトが完了した後も変数が保持されると思いました。実行するとecho $EC_HOME何も表示されないため、そうではありません。

私はこれが非常に基本的なLinuxスクリプトの知識であるに違いないことを知っていますが、わかりません。関連する質問を探しましたが、運がありませんでした。したがって、これが重複した場合は謝罪します。

答え1

スクリプトを使用する必要があります

. ./script

または

source ./script

答え2

スクリプトを実行すると、独自のシェルと環境が作成され、スクリプトが完了すると再び消えます。環境変数を保持するには、スクリプトを現在のシェルに配置します。

$ source ./a.sh

または同等に(ただし、より移植性が高い)使用POSIX ドットコマンド:

$ . ./a.sh

その後、これらの定義は現在のシェル環境に配置され、ここで実行されているすべてのプログラムによって継承されます。

スクリプトの実行に近づくには、環境変数. a.shでディレクトリを検索してa.shを見つけます。PATH


.それらの行動の仕方と過がsource同じか(またはまったく存在するか)には若干の微妙さがあります。. ./a.sh動作はすべてのPOSIX互換シェルでまったく同じですが、および、sourceおよび.. a.sh. ./a.sh異なる場合があります。大きな打撃のためにsourceそして.同じです。すべての場合で。zsh はsource常に現在のディレクトリを最初にチェックします。; kshは本質的に似ています。

スクリプト名をパス(含む/)として指定すると、すべての場合にそのパスが直接使用されます。最も携帯可能で安定したものは. ./scriptまたはです. /path/to/script

答え3

記録だけのために。

インターネット上でスクリプトを実行するには、環境をシステムにエクスポートします。

次の形式を使用できます。

source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh)

たとえば、

source <(curl -s -L https://example.com/install.sh)

答え4

努力する

exec ./script

exec コマンドは、非対話型シェルを起動せずに、現在のシェルでスクリプトを実行します。

関連情報