如何一次导出设置的变量?


39

set命令显示所有本地变量,如下所示。我如何一次导出所有这些变量?

>set
a=123
b="asd asd"
c="hello world"

你是什​​么意思一次全部导出?您可以使用半冒号在一行中进行定义...就像a = 123; b =“ asd asd”; c =“ hello world”
Raza


2
set还显示函数和系统变量,例如BASH_VERSION
glenn jackman

您的问题不清楚。这是set您正在显示的输出摘录吗?如果是这样,则不是bash。是否要导出所有当前设置的变量,包括特殊的shell变量?还是只有像in中的那三个变量export a b c
斯特凡Chazelas

export ${!T*}将导出名称以开头的所有已定义参数T。不幸的是,似乎没有一种方法可以轻松地生成所有已定义参数的列表。
chepner 2013年

Answers:


72

在设置变量之前,运行以下命令:

set -a 

手册页:

-a
启用该选项时,应为每个要执行赋值的变量设置导出属性;

要关闭此选项,请set +a随后运行。

例:

set -a
. ./environment
set +a

其中environment包含:

FOO=BAR
BAS='quote when using spaces'

13
但是,必须在分配变量之前启用它。它对先前分配的变量没有任何作用。
chepner 2013年

1
@chepner,谢谢我忘了提起!
尼汀

这也将以与function example(){ echo good; }; export -f example
Oliver

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  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

  2. 获取所有环境变量名称,以空格分隔: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命令

  3. 现在,我们需要导出这些变量,但是xargs无法做到这一点,因为它派生了子进程,导出必须在当前进程下运行。echo "export" ...构建我们想要的命令,然后使用``来运行它。就这样:p。


欢迎来到U&L SE。也许您可以编辑您的帖子并进行一些说明。
Archemar

1
假设环境变量名称仅由z和AZ组成是不正确的。它们通常也包含下划线和数字,因此模式为[a-zA-Z_][a-zA-Z0-9_]*。根据您所使用的外壳,它会有一些变化,但这是安全/可移植的方法。
克里斯·约翰逊

好点@ChrisJohnson-更新!
威尔摩尔三世

3

您可以通过加上export变量名称,awk然后eval将其输出:

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenv打印已经导出的变量。如果存在包含换行符的变量,那也将无法正常工作。
斯特凡Chazelas

2

如果您的外壳是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"

然后用所有这些env vars发行当前的shell

source  /my/env/var/file
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.