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

Nee*_*rav 64 bash

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

>set
a=123
b="asd asd"
c="hello world"
Run Code Online (Sandbox Code Playgroud)

小智 117

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

set -a 
Run Code Online (Sandbox Code Playgroud)

手册页:

-a
当此选项打开时,应为执行赋值的每个变量设置导出属性;

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

例子:

set -a
. ./environment
set +a
Run Code Online (Sandbox Code Playgroud)

其中environment包含:

FOO=BAR
BAS='quote when using spaces'
Run Code Online (Sandbox Code Playgroud)

  • 但是,这必须在分配给变量之前启用。它对先前分配的变量没有任何作用。 (14认同)
  • 这也会以与 `function example(){ echo good; 相同的方式自动导出函数。}; 导出-f示例` (3认同)

Sco*_*and 6

如果您的外壳是 bash(也可能是其他外壳),则此方法有效

export > /my/env/var/file
Run Code Online (Sandbox Code Playgroud)

您的新文件将包含所有当前定义的变量的转储......

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"
Run Code Online (Sandbox Code Playgroud)

然后用所有这些 env vars 问题来提升当前的 shell

source  /my/env/var/file
Run Code Online (Sandbox Code Playgroud)


小智 5

`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
Run Code Online (Sandbox Code Playgroud)
  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-Printing column value without new line 并添加逗号/sf/ask/994909541/ awk 命令

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