You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本处理export格式密钥文件,提取键值生成对应文件?

修正后的Bash脚本实现密钥文件转换逻辑

完整修正脚本

#!/bin/bash

# 确保output目录存在,不存在则创建
mkdir -p output

# 遍历input目录下所有.txt文件
for file in input/*.txt; do
    # 跳过不存在的文件(避免input目录无txt文件时报错)
    [[ -f "$file" ]] || continue

    # 1. 在当前shell环境中source加载文件,使环境变量生效
    source "$file"

    # 2. 提取key:移除行首的export及空格,取第一个等号前的内容
    key=$(awk -F'=' '{gsub(/^export[[:space:]]*/, "", $1); print $1}' "$file")

    # 3. 通过bash间接引用获取对应环境变量的真值
    value=${!key}

    # 4. 写入output目录下以key命名的文件(-n避免自动添加换行符)
    echo -n "$value" > "output/$key"
done

关键修正点说明

  • 目录预检查:用mkdir -p保证output目录存在,避免写入时因目录缺失报错。
  • 安全遍历文件:加入[[ -f "$file" ]] || continue处理input目录无txt文件的边界情况。
  • 准确提取key:通过awk移除export前缀及空格,精准定位第一个等号前的变量名,适配文件格式要求。
  • 环境变量真值获取:使用bash间接引用语法${!key},直接读取source后生效的环境变量值,避免解析文件引号带来的误差。

配套验证逻辑(test.py示例)

import os
import re

input_dir = "input"
output_dir = "output"

# 从input文件解析预期的key-value映射
expected = {}
for filename in os.listdir(input_dir):
    if not filename.endswith(".txt"):
        continue
    with open(os.path.join(input_dir, filename), "r") as f:
        line = f.read().strip()
        match = re.match(r'export\s+(\w+)="(.*)"', line)
        if match:
            expected[match.group(1)] = match.group(2)

# 验证output文件内容与预期一致
for key, val in expected.items():
    output_path = os.path.join(output_dir, key)
    assert os.path.exists(output_path), f"缺失文件: {output_path}"
    with open(output_path, "r") as f:
        assert f.read().strip() == val, f"key {key} 值不匹配"

# 验证环境变量与预期一致
for key, val in expected.items():
    assert os.getenv(key) == val, f"环境变量 {key} 值不匹配"

print("所有验证通过!")

内容的提问来源于stack exchange,提问作者Amin Ba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:38:21