設定されている変数を一度にエクスポートする方法は?


39

setコマンドは、以下のようなすべてのローカル変数を表示します。これらの変数を一度にすべてエクスポートするにはどうすればよいですか?

>set
a=123
b="asd asd"
c="hello world"

一度にすべてをエクスポートするとはどういう意味ですか?あなたは= 123のように... 1行で定義してセミコロンを使用することができますし、b =「ASD ASD」と、c =「Hello World」の
ラザ


2
setBASH_VERSIONのような関数とシステム変数も表示します
グレンジャックマン

あなたの質問は不明です。それはsetあなたが示している出力の抜粋ですか?もしそうなら、それはそうではありませんbash。特別なシェル変数を含む現在設定されているすべての変数をエクスポートしますか?または、のような3つの変数のみexport a b c
ステファンシャゼラス

export ${!T*}は、名前がで始まる定義済みパラメータをエクスポートしTます。残念ながら、すべての定義済みパラメーターのリストを簡単に生成する方法はないようです。
chepner

回答:


72

変数を設定する前に、次のコマンドを実行します。

set -a 

マニュアルページ:

-a
このオプションがオンの場合、割り当てが実行される変数ごとにエクスポート属性が設定されます。

このオプションをオフにするには、set +a後で実行します。

例:

set -a
. ./environment
set +a

environment含まれている場所:

FOO=BAR
BAS='quote when using spaces'

13
ただし、変数に割り当てる前にこれを有効にする必要があります。以前に割り当てられた変数には何もしません。
chepner

1
@chepner、ありがとうございます!
ニティン

また、これは次と同じ方法で関数を自動的にエクスポートしますfunction example(){ echo good; }; export -f example
Oliver I

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. 最初に、設定されているすべての環境変数を取得します。(set -o posix ; set) 参照:https : //superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-ba

  2. スペースで区切られたすべての環境変数名を取得します。awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' 参照:改行なしでawk-Printing列の値を入力し、カンマhttps://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- を追加ますawkコマンド

  3. ここで、これらの変数をエクスポートする必要がありますが、xargsは子プロセスをフォークするため、これを実行できません。エクスポートは現在のプロセスで実行する必要があります。echo "export" ...必要なコマンドを作成し、「」を使用して実行します。それだけです:p。


U&L SEへようこそ。投稿を編集して、説明することができます。
アーケマー

1
環境変数名がazとAZのみで構成されると仮定するのは正しくありません。通常、アンダースコアと数字も含まれるため、パターンはになります[a-zA-Z_][a-zA-Z0-9_]*。使用しているシェルに基づいてこれにはいくつかのバリエーションがありますが、これは安全で移植性の高いアプローチです。
クリスジョンソン

良い点@ChrisJohnson-更新されました!
ウィルムーアIII

3

あなたは先頭に追加することができexport、変数名を経由するawkeval、結果の出力:

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenvすでにエクスポートされている変数を出力します。また、改行文字を含む変数がある場合、適切に機能しません。
ステファンシャゼル

2

これは、シェルがbashの場合に機能します(おそらく他のシェルも同様です)

export > /my/env/var/file

新しいファイルには、現在定義されているすべての変数のダンプが含まれます...

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

次に、すべての環境変数の問題で現在のシェルをジャッキアップする

source  /my/env/var/file
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.