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

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

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 +aset +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}')`
  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

  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-command

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

答案4

compgen -v将打印所有变量名称的列表,以便您可以将它们全部导出

export $(compgen -v)

根据您定义的变量,这将产生各种影响(例如:BASHOPTS将由此导出)。请注意如何使用它。

相关内容