如何从变量k和v动态编写use k和v?

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

我们有任意数量的文件,我知道它们具有这种格式

export k="v"

并且我知道 k 不包含 and = 符号。我想将 k 视为分隔符。

0.txt

export a="x=y ==\n=/n/ //a=\n:=dd"

1.txt

export b="====x\\nn/ //y=\n:=dd"

2.txt

export My_key="my-value"

等等!

我想迭代文件并执行以下操作:

  • 获取文件来源
  • 拿到钥匙(第一个=号之前的所有内容)
  • 获取价值
  • 创建一个名为第一步中的 key 的文件,并使用上面第二步中的值填充该文件 - 该值的真实来源是运行 source 命令时来自 env 的值

bash.sh 文件

#!/bin/bash

INPUT_DIR="input"
OUTPUT_DIR="output"

for filename in "$INPUT_DIR"/*; do
    source "$filename"
    # the three lines below is something I tried and it did not work
    # key=$(cat "$filename" | cut -d '=' -f 1 | cut -d ' ' -f 2)
    # VALUE=$(eval echo "\$$key")
    # printf "%s" "$VALUE" > "$OUTPUT_DIR/$key"
done

python3 test.py

测试.py

import os

a_env, a_file =  os.environ["a"], open("output" + "/" + "a", "r").read()
b_env, b_file =  os.environ["b"], open("output" + "/" + "b", "r").read()
Mykey_env, Mykey_file =  os.environ["My_key"], open("output" + "/" + "My_key", "r").read()

assert a_env == a_file
assert b_env == b_file
assert Mykey_env == Mykey_file

我怎样才能让它发挥作用?上下文是一些 sidecar 容器正在将机密注入输入目录中名为 0、1、2、3 等的文件中,格式为

export k="v"
- 我希望它们既可以作为环境变量也可以作为文件使用,并且我想要文件名是关键

请记住,该值的真实来源是运行源后的 env

bash shell environment-variables
2个回答
0
投票

这有效。不知道这样的做法有没有问题

#!/bin/bash

INPUT_DIR="input"
OUTPUT_DIR="output"

# Iterate over each file in the input directory
for filename in "$INPUT_DIR"/*; do
    source "$filename"
    key=$(cat "$filename" | cut -d '=' -f 1 | cut -d ' ' -f 2)
    eval echo -n "\$$key" > "$OUTPUT_DIR/$key"
done

python3 test.py

0
投票

我会做什么:

awk -F '="' '
    {
        sub(/export /, "")
        sub(/"$/, "")
        print $2 > $1
    }
' *.txt 
ls -1
© www.soinside.com 2019 - 2024. All rights reserved.