sed替换配置文件时不渲染fernet_key参数值问题求助
核心问题原因
你遇到的是Shell引号规则导致的变量未展开问题:sed语句中你用了单引号包裹替换规则,单引号会强制将内部所有字符按字面量解析,不会处理任何变量替换、转义逻辑,所以$fernet_key被直接当做普通字符串输出。
修复方案
直接将sed的替换规则改用双引号包裹即可,正确代码如下:
fernet_key="$(python3 -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())')" # Linux 环境使用 sed -i -e "s|{FERNET_KEY}|$fernet_key|g" ~/config.yml # macOS 环境使用(mac自带sed要求-i参数后必须指定备份后缀,传空字符串代表不生成备份) sed -i '' -e "s|{FERNET_KEY}|$fernet_key|g" ~/config.yml
额外说明
- 你选择
|作为sed分隔符是正确的:Fernet生成的密钥是URL安全的Base64编码,字符集仅包含大小写字母、数字、-、_、=,不会出现|字符,不会触发分隔符冲突。 - 你之前的echo操作可以正常执行,正是因为echo后的语句用了双引号包裹,变量会被正常展开。
内容的提问来源于stack exchange,提问作者14578446
相关产品推荐
相关产品推荐

