Linux脚本持久化环境变量

Nes*_*ano 5 bash shell

我正在尝试将从密钥保管库获取的密钥保留为 Linux 服务器上给定用户的环境变量。该脚本不起作用。我什至无法看到变量是否在 shell 中临时设置。

这是我的剧本。

#!/usr/bin/env bash
  KEY_VAULT=$1

function fetch_secret_from_keyvault() {
    local SECRET_NAME=$1

    az keyvault secret show --vault-name "${KEY_VAULT}" --name "${SECRET_NAME}" --query "value"
}

function store_secret_from_keyvault() {
    local SECRET_VAR=$1
    local SECRET_NAME=$2

    local SECRET_VALUE=`fetch_secret_from_keyvault "${SECRET_NAME}"`
    store_secret "${SECRET_VAR}" "${SECRET_VALUE}"
}

function store_secret() {
    local SECRET_VAR=$1
    local SECRET_VALUE=$2

    echo "export ${SECRET_VAR}=${SECRET_VALUE}"
}

echo "# ----------------------- "
echo "# Fetched the following secret from ${KEY_VAULT} on "`date`

store_secret_from_keyvault "MONGO_URI" "local-dev-mongo-uri"
Run Code Online (Sandbox Code Playgroud)

我读过,导出仅临时存储变量。

脚本运行,但最后未设置变量。我想在执行时看到它们

printenv
Run Code Online (Sandbox Code Playgroud)

Nic*_*500 9

如果您运行脚本来设置变量,则变量将仅在该特定执行的上下文中设置。要设置变量,您必须获取文件,而不是执行它。

前任。设置环境.bash

#!/bin/bash
export var1=value1
export var2=value2
Run Code Online (Sandbox Code Playgroud)

如果这样做./setenv.bash,var1 和 var2 将仅在脚本运行时存在。

如果执行. ./setenv.bashor source ./setenv.bash,则脚本完成后 var1 和 var2 将存在。


mar*_*rkp 5

假设:

  • OP想要动态填充和导出一个新变量,以便......
  • 新变量在当前会话中可用/已导出

使用 nameref 的一个想法...

function store_secret() {
    declare -n SECRET_VAR=${1}
    export SECRET_VAR=${2}
}
Run Code Online (Sandbox Code Playgroud)

运行测试:

$ unset secret_var
$ secret_var=56
$ typeset -p secret_var
declare -- secret_var="56"                  # defined as a normal variable

$ unset secret_var
$ typeset -p secret_var
-bash: typeset: secret_var: not found       # variable is undefined

$ store_secret secret_var 47
$ typeset -p secret_var
declare -x secret_var="47"                  # defined as an exported variable
Run Code Online (Sandbox Code Playgroud)