2016-08-05 5 views
0

Terraformをサーバーにダウンロードしてインストールするスクリプトを作成しました。シェルスクリプト内でのパス変数のエクスポート

#!/bin/bash 

wget https://releases.hashicorp.com/terraform/0.7.0/terraform_0.7.0_linux_amd64.zip 

unzip terraform_0.7.0_linux_amd64.zip 

echo "export PATH=$PATH:/root/terraform_dir" >> /root/.bash_profile 

source /root/.bash_profile 

terraform --version 

このコードは完全に動作しています。しかし、スクリプトが完成して出てくると、.bash_profileファイルは元の状態に戻ります。すなわち、パス変数は更新されない。

私がterraform --versionをシェルスクリプトの外に出すと、正常に動作しません。

しかし、私はsu -を与えてから、terraform --versionを試してみると実際にうまくいきます。

.bash_profileを更新するための回避策または自動スクリプトがありますか。 .bash_profileを更新するたびにセッションを再開したくありませんか?

+0

を言っていますか?これはあなたが編集したプロファイルによってかなり明白です。 – ydaetskcoR

+0

スクリプトを起動する環境は?それはroot-onlyですか? cronの仕事ではない?通常のユーザーとして起動しますか?あなたはいつもファイルにエクスポート行を追加することを覚えておいてください。 – ferdy

+0

私がrootユーザーとしてのみログインしているときには動作しません。 いいえ、cronジョブではありません。 このスクリプトは常にrootユーザーとしてのみ実行されます。 – sriramsm04

答えて

0

シェルスクリプトは(最初の行をint!#!/ bin/bashとして定義しています)、環境の変更はそのサブシェルにローカルなので、bash_profileのソースはサブシェルのみに影響します。

あなたの現在のシェルでスクリプトを実行するために、sourceコマンドを使用し、あなたの現在のシェルでコマンドを実行するために(http://ss64.com/bash/source.html

例えば 代わり

$ ./myscript.sh 

ラン:あなたはルートじゃないけど、あなたがルートされたときにそれがあるとき、それは働いていないことを

$ source ./myscript.sh 
+0

ありがとう、トンの男!これはうまくいった! – sriramsm04

+0

お寄せください。これがあなたを助けたなら、答えを受け入れてください:) – Oliver

関連する問題