set command displays all the local variables like below. How do I export these variables all at once?
>set
a=123
b="asd asd"
c="hello world"
set command displays all the local variables like below. How do I export these variables all at once?
>set
a=123
b="asd asd"
c="hello world"
Run the following command, before setting the variables:
set -a
set -o allexport # self-documenting version
-a
When this option is on, the export attribute shall be set for each variable to which an assignment is performed
-o option-name
Set the option corresponding tooption-name:
allexport
Same as-a.
To turn this option off, run set +a or set +o allexport afterwards.
Example:
set -a # or: set -o allexport
. ./environment
set +a
Where environment contains:
FOO=BAR
BAS='quote when using spaces, (, >, $, ; etc'
Same preliminary requirement as chosen answer ... either explicitly export each variable as per
export aaaa=1234
or prior to any variable assignment issue
set -a # for details see answer by @nitin
then this works if your shell is bash ( possibly other shells as well )
export > /my/env/var/file
your new file will contain a dump of all currently defined variables ... with entries like
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"
then to jack up current shell with all those env vars issue
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}')`
First, get all set environment variables: (set -o posix ; set)
Reference: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba
Get all environment variable names, separated by space: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}'
Reference: awk-Printing column value without new line and adding comma and
https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command
Now, we need to export these variables, but xargs can not do this because it forks child process, export have to be run under current process. echo "export" ... build a command we want, then use `` to run it. That's all :p.
compgen -v will print a list of all variable names so you can export them all with
export $(compgen -v)
This will have various effects depending on the variables you have defined (ex: BASHOPTS will get exported by this). Be wary of how you use this.
You can prepend export to the variable name via awk and eval the resulting output:
eval $(printenv | awk -F= '{ print "export " $1 }')