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'
function example(){ echo good; }; export -f example
– Oliver I
Aug 29 '17 at 15:16
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
export
only prints variables that are already (marked to be) exported, while I believe the question is about variables that are set, but not marked to be exported. I just tested this on bash, which prints nothing: FOOBAR=x; export | grep FOOBAR
.
– Matthijs Kooijman
Mar 09 '22 at 15:58
`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.
[a-zA-Z_][a-zA-Z0-9_]*
. There are some variations on this based on the shell you're using, but this is the safe / portable approach.
– Chris Johnson
May 05 '17 at 17:27
You can prepend export
to the variable name via awk
and eval
the resulting output:
eval $(printenv | awk -F= '{ print "export " $1 }')
printenv
prints the variables that are already exported. That also won't work properly if there are variables that contain newline characters.
– Stéphane Chazelas
Aug 29 '17 at 10:57
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.
export $(compgen -v)
(also assuming an unmodified $IFS
), bearing in mind that exporting bash builtin variables such as SHELLOPTS
or BASHOPTS
can have nasty consequences.
– Stéphane Chazelas
Feb 06 '22 at 15:01
export
accepts multiple symbols. I've incorporated most of your comment into the answer.
– johncs
Feb 12 '22 at 00:54
set
also displays functions and system variables like BASH_VERSION – glenn jackman Jun 11 '13 at 21:02set
output you're showing? If so, then it's notbash
's. Do you want to export all the currently set variable including the special shell variables? Or only those 3 variables like inexport a b c
? – Stéphane Chazelas Jun 11 '13 at 21:07export ${!T*}
would export any defined parameter whose name starts withT
. Unfortunately, there doesn't seem to be a way to easily generate a list of all defined parameters. – chepner Jun 13 '13 at 15:43