我们有任意数量的文件,我知道它们具有这种格式
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"
等等!
我想迭代文件并执行以下操作:
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
这有效。不知道这样的做法有没有问题
#!/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
我会做什么:
awk -F '="' '
{
sub(/export /, "")
sub(/"$/, "")
print $2 > $1
}
' *.txt
ls -1