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
如果你的 shell 是 bash (也可能是其他 shell),那么这可以工作
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"
然后用所有这些环境变量问题来提升当前的 shell
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
将由此导出)。请注意如何使用它。