set
コマンドは、以下のようなすべてのローカル変数を表示します。これらの変数を一度にエクスポートするにはどうすればよいですか?
>set a=123 b="asd asd" c="hello world"
コメント
- エクスポートとはどういう意味ですか一斉に?セミコロンを使用して1行で定義できます… a = 123; b = " asd asd "; c = <のようにdiv id = "30c27fb507">
hello world "
set
にはBASH_VERSIONなどの関数やシステム変数も表示されますset
出力の抜粋ですか?その場合、'はbash
'ではありません。特別なシェル変数を含む、現在設定されているすべての変数をエクスポートしますか?または、export a b c
のような3つの変数のみ?export ${!T*}
は、名前が。残念ながら、'定義されたすべてのパラメータのリストを簡単に生成する方法はないようです。
回答
変数を設定する前に、次のコマンドを実行します。
set -a
manページ:
-a
このオプションがオンの場合、エクスポート属性はそれぞれに設定されます。割り当てが実行される変数。
このオプションをオフにするには、後でset +a
を実行します。
例:
set -a . ./environment set +a
environment
の内容:
FOO=BAR BAS="quote when using spaces"
コメント
- ただし、変数に割り当てる前にこれを有効にする必要があります。 '以前に割り当てられた変数には何もしません。
- @chepner、ありがとうございます!!
- これも自動的に
function example(){ echo good; }; export -f example
回答
と同じ方法で関数をエクスポートしますこれは、シェルが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
回答
`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-defined-environment-variables-in-a-linux-ba -
すべての環境変数名をスペースで区切って取得します:
awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}"
参照: awk-列の値を出力しますe改行なしで、カンマを追加および https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command -
ここで、これらの変数をエクスポートする必要がありますが、xargsは子プロセスをフォークするため、これを行うことはできません。エクスポートは現在のプロセスで実行する必要があります。
echo "export" ...
必要なコマンドを作成し、「」を使用して実行します。以上です:p。
コメント
- Uへようこそ& L SE。投稿を編集して、説明を付けることができるかもしれません。
- '環境変数名がazのみで構成されると想定するのは正しくありません。とAZ。通常、アンダースコアと数字も含まれるため、パターンは
[a-zA-Z_][a-zA-Z0-9_]*
になります。これにはシェルに基づいていくつかのバリエーションがあります'を使用していますが、これは安全でポータブルなアプローチです。 - 良い点@ ChrisJohnson-更新されました!
回答
awk
およびivid = “69a748bd07″を使用して、変数名の前にexport
を追加できます。 >
結果の出力:
eval $(printenv | awk -F= "{ print "export " $1 }")
コメント
-
printenv
は、すでにエクスポートされている変数を出力します。これも'動作しません。改行文字を含む変数がある場合。