1

我构建了一个小脚本,从标准 django 设置创建副本。复制项目后,我想替换SECRET_KEY. 原始SECRET_KEY和替换都包含许多特殊字符。我的外壳代码如下所示:

SECRET=$(python -c 'from random import choice; import sys; sys.stdout.write("".join([choice("abcdefghijklmnopqrstuvwxyz0123456789^&*(-_=+)") for i in range(50)]))')
sed --in-place "s/^SECRET_KEY = .*/SECRET_KEY = '${SECRET}'/" src/settings.py

当我运行它时,它有时会起作用,但在大多数情况下,结果看起来像这样:

SECRET_KEY = '*n(hbp+o31v*d3pSECRET_KEY = '=ih8(6hwlqiamvg88_jtatqi1w2^axl=+omrpwck*aena-c3ax'8gpv8SECRET_KEY = '=ih8(6hwlqiamvg88_jtatqi1w2^axl=+omrpwck*aena-c3ax'8bwc4ele+bk(*+)vv4tSECRET_KEY = '=ih8(6hwlqiamvg88_jtatqi1w2^axl=+omrpwck*aena-c3ax'*qscez(f'

我不知道所有这些垃圾来自哪里,但我想这与原始SECRET_KEY或替换中的特殊字符有关,它们被解释为正则表达式特殊字符。知道如何摆脱这个吗?

4

1 回答 1

2

做正则表达式转义你的秘密生成器,你应该没问题:

使用 re.escape。

SECRET=$(python -c 'import re;from random import choice; import sys; sys.stdout.write(re.escape("".join([choice("abcdefghijklmnopqrstuvwxyz0123456789^&*(-_=+)") for i in range(50)])))')
于 2013-04-03T09:04:15.210 回答