对于每个环境变量,使用base64编码值创建一个环境变量

问题描述 投票:0回答:1

对于某些环境变量 (

*_PASSWORD
),我想创建第二个环境变量,其中包含该变量的 Base64 编码副本 (
*PASSWORD_B64
)。我有一个 bash 的工作解决方案,但我希望有一个基于 POSIX 的解决方案,因此它可以在
sh
中运行。

while read -r line; do
  CMD="${line}_B64=$(echo -n "${!line}" | base64)";
  export "$CMD";
done <<< $(env | grep -E "PASSWORD=" | sed 's/=.*//g')

我认为这里有两个问题:

  1. 间接参数扩展
    ${!line}
    :我可以用
    eval
    替换。
  2. 带有
    <<<
    的 while 循环:这是我可以让它工作的唯一 while 循环,因为其他方式,它将在子 shell 中运行它,并且环境变量在“父 shell”中不可见.

有办法让它运行在

sh
吗?

编辑:这是上面命令正在执行的操作的示例:

$ env
TEST1_PASSWORD=Hello
TEST2_PASSWORD=World
$ # run command from above
$ env
TEST1_PASSWORD=Hello
TEST2_PASSWORD=World
TEST1_PASSWORD_B64=SGVsbG8=
TEST2_PASSWORD_B64=V29ybGQ=
sh posix
1个回答
0
投票

这似乎有效...

#!/bin/sh
set |while read line; do
        k=`echo $line|cut -d"=" -f1`;
        v=`echo $line|cut -d"=" -f2`;
        t=`echo $k|grep PASSWORD$`;
        if [ $t ]; then
                export ${k}_B64=`echo $v|base64`;
                echo export ${k}_B64=`echo $v|base64`;
        fi;
done
© www.soinside.com 2019 - 2024. All rights reserved.