環境変数をエクスポートするスクリプトはエクスポートできません。

環境変数をエクスポートするスクリプトはエクスポートできません。

名前が次のスクリプトがありますexport.sh

#!/bin/bash

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done

SOURCE=$(dirname ${SOURCE})

export $(cat "${SOURCE}/../params.env" | xargs)

つまり、通常はparams.envデフォルトフォルダにあるというファイルから環境変数をエクスポートし、その内容を環境変数としてエクスポートするということです。

ファイルの内容の例は次のとおりparams.envです。

SOMEVAR="val1"
SOMEVAR2="val2"

成功した実行は私にSOMEVAR価値val1SOMEVAR2貴重なval2環境変数を提供します。

しかし、私が実行した場合:

./export.sh

それから

printenv | grep SOMEVAR

環境変数が設定されたことを示しません。

答え1

すべての考えは正しかったが、結局あなたは実装する代わりにシェルスクリプト購入現在のシェルの環境が変更されます。

スクリプトを実行すると、サブシェルが実行され、エクスポートされたすべてのシステム環境変数が失われたサブシェルが終了した後。

デバッグモードに設定されたスクリプトを実行すると、何が起こるかを確認してください-x(注意して私はparams.env現在のフォルダで使用されています)。

$ bash -x script.sh
+ SOURCE=script.sh
+ '[' -h script.sh ']'
++ dirname script.sh
+ SOURCE=.
++ cat ./params.env
++ xargs
+ export SOMEVAR=val1 SOMEVAR2=val2
+ SOMEVAR=val1
+ SOMEVAR2=val2

変数が設定されていることがわかりますが、サブシェルはエクスポートした変数を削除します。今スクリプトを見つけるとき、

source script.sh
printenv | grep SOMEVAR
SOMEVAR=val1
SOMEVAR2=val2

bashバージョンが明示的なコマンドをサポートしていない場合は、互換性のある方法をsource使用してください。POSIX. ./script.sh

関連情報