我想mutt
(mutt-kz
实际上 - 我很想迁移到,neomutt
但这是一个更大的项目)从中获取我的 SMTP 密码,pass
这样我就不必将其以明文形式存储在我的配置文件中,但我不是确定如何正确地将密码传递到我的.muttrc
.
这就是我所拥有的.muttrc
:
source ~/.mutt/pass.sh|
set smtp_pass = $my_pass
然后.mutt/pass.sh
包含:
#! /bin/bash
my_pass=$(pass Example/user)
如果我添加echo ${my_pass}
并pass.sh
从命令行运行它,它会回显我的密码。
当我启动时,mutt-kz
系统提示我解锁我的pass
gpg 密钥,因此某些功能正常运行,但是当我尝试从 Mutt 发送邮件时,它会要求我输入 SMTP 密码,如果我不提供密码,则不会发送邮件:“SASL 身份验证失败”)
那么...我如何正确地将变量从我的 shell 脚本传递到我的.muttrc
?
答案1
该程序~/.mutt/pass.sh
必须产生如下所示的输出
set my_pass = swordfish
所以它可以是这样的
#!/bin/sh
echo "set my_pass = swordfish"
请注意,如果您的密码包含某些特殊字符(\'"
和空格),您需要引用它。例如,如果您的密码位于文本文件中~/passwords/smtp.txt
,则可以使用:
#!/bin/sh
~/passwords/smtp.txt sed 's/["$`\\]/\\&/g; s/^/set my_pass = "/; s/$/"/'
对于密码sword\fish
,将打印此内容set my_pass="sword\\fish"
。
如果您使用 Gnome-keyring 来存储密码,那么您可以使用该secret-tool
实用程序从密钥环中读取密码。例如,这就是我用于 Office 365 密码的内容(密码不包含任何需要引用的特殊字符):
source 'printf "set imap_pass="; secret-tool lookup action_url https://login.microsoftonline.com/common/login |'
答案2
另一种可能性是使用反引号扩展。所以你应该能够做到:
my_pass = `pass Example/user`
如果您最终迁移到,neomutt
您还可以使用命令行定义变量,即
my_pass=$(pass Example/user) mutt
然后您可以my_pass
像示例中那样使用变量。