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 コマンドは、非対話型シェルを起動せずに、現在のシェルでスクリプトを実行します。