我需要为环境变量设置密码,但问题是密码包含尖锐符号,当我想使用这个变量时,只显示第一个尖锐符号。例如假设he#l#lo
是我的密码,当我将其设置为 时/etc/environment
,PASSWORD_API="he#l#lo"
我打印它只是显示he
并在之后留下字符#
。但是当我export PASSWORD_API="he#l#lo"
从终端使用时一切正常!通过添加环境变量有什么问题\etc\environment
我无法更改密码所以如果你有任何想法请帮助我。谢谢你
我需要为环境变量设置密码,但问题是密码包含尖锐符号,当我想使用这个变量时,只显示第一个尖锐符号。例如假设he#l#lo
是我的密码,当我将其设置为 时/etc/environment
,PASSWORD_API="he#l#lo"
我打印它只是显示he
并在之后留下字符#
。但是当我export PASSWORD_API="he#l#lo"
从终端使用时一切正常!通过添加环境变量有什么问题\etc\environment
我无法更改密码所以如果你有任何想法请帮助我。谢谢你
据我所知,这是
pam_env
模块如何读取环境文件行的限制(甚至在尝试将它们解析name=value
成对之前)。具体来说,在
_pam_assemble_line
函数 (inlibpam/pam_handlers.c
) 中:似乎没有规定以任何不同的方式处理带引号或转义的字符串。
如果您需要使用此类字符设置环境变量,那么您将需要在其他地方进行 - 例如,创建一个
/etc/profile.d/password-api.sh
包含该行的文件默认情况下应该获取它
/etc/profile
。当然,我相信您知道,在任何地方以纯文本形式存储密码是一个坏主意 - 如果您的应用程序提供了另一种选择(例如使用基于密钥的身份验证,或将密码安全地添加到代理),您应该使用它。
删除等号周围的空格:
我尝试了很多设置环境的方法,但导出似乎只能工作,并且每次重新启动时都运行一堆导出,您在 cron 作业中运行 shell 脚本。
添加 systemd 环境变量https://www.freedesktop.org/software/systemd/man/systemd.exec.html#EnvironmentFile=这显示了它是如何在环境文件中完成的,它只能用于读取非 # 值,否则它打破 # 价值。
使用以下命令创建一个 shell 脚本:
然后运行:
选择您将使用的编辑器并继续添加脚本以在重新启动时运行。
保存文件并重新启动。您在 env.sh 中添加的任何内容都将针对环境变量运行。它们将很容易设置,并且不会因
#
.