設定した変数を一度にエクスポートするには?

設定した変数を一度にエクスポートするには?

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

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

答え1

変数を設定する前に、次のコマンドを実行してください。

set -a
set -o allexport  # self-documenting version

マニュアルページ:

-a
このオプションが有効になっている場合は、割り当てを実行する各変数にエクスポートプロパティを設定する必要があります。

-o option-name
適切なオプションを設定してくださいoption-name

  • allexport
    と同じです-a

このオプションをオフにするには、set +aまたはset +o allexport以降を実行してください。

例:

set -a  # or: set -o allexport 
. ./environment
set +a

これには以下がenvironment含まれます。

FOO=BAR
BAS='quote when using spaces, (, >, $, ; etc'

答え2

選択した回答と同じ初期要件...次のように各変数を明示的にエクスポートします。

export aaaa=1234

または、変数割り当ての問題が発生する前に

set -a  #  for details see answer by @nitin 

シェルが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

答え3

`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-define-environment-variables-in-a-linux-ba

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

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

答え4

compgen -vすべての変数名のリストを印刷して、すべてエクスポートできます。

export $(compgen -v)

定義した変数によっては、さまざまな効果が表示されます(例:BASHOPTSここからエクスポートします。)。使用方法にご注意ください。

関連情報