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}')`
まず、すべての環境変数セットを取得します。
(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スペースで区切られたすべての環境変数名を取得します。
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これでこれらの変数をエクスポートする必要がありますが、xargsは子プロセスをフォークし、エクスポートは現在のプロセスで実行する必要があるため、これを行うことはできません。
echo "export" ...
必要なコマンドを作成し、 ``を使って実行してください。それだけです:p。
答え4
compgen -v
すべての変数名のリストを印刷して、すべてエクスポートできます。
export $(compgen -v)
定義した変数によっては、さまざまな効果が表示されます(例:BASHOPTS
ここからエクスポートします。)。使用方法にご注意ください。